summaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2024-07-19 07:11:25 +0200
committerdefault <nobody@localhost>2024-07-19 07:11:25 +0200
commit6e3b621f7b84844ce18eb953fc7fba806472bef8 (patch)
treec22e65d60fd710ed2affcd255acc3e0d7e4f0b01 /format.c
parentf3b392e06a72cc1461ab2c9587c96991a2731e9c (diff)
Added support for Markdown ~~strikethrough text~~.
Diffstat (limited to 'format.c')
-rw-r--r--format.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/format.c b/format.c
index 52edd05..170d28a 100644
--- a/format.c
+++ b/format.c
@@ -89,6 +89,7 @@ static xs_str *format_line(const char *line, xs_list **attach)
xs *sm = xs_regex_split(line,
"("
"`[^`]+`" "|"
+ "~~[^~]+~~" "|"
"\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
"\\[[^]]+\\]\\([^\\)]+\\)" "|"
"https?:/" "/[^[:space:]]+"
@@ -100,30 +101,37 @@ static xs_str *format_line(const char *line, xs_list **attach)
if ((n & 0x1)) {
/* markup */
if (xs_startswith(v, "`")) {
- xs *s1 = xs_crop_i(xs_dup(v), 1, -1);
+ xs *s1 = xs_strip_chars_i(xs_dup(v), "`");
xs *e1 = encode_html(s1);
xs *s2 = xs_fmt("<code>%s</code>", e1);
s = xs_str_cat(s, s2);
}
else
if (xs_startswith(v, "***")) {
- xs *s1 = xs_crop_i(xs_dup(v), 3, -3);
+ xs *s1 = xs_strip_chars_i(xs_dup(v), "*");
xs *s2 = xs_fmt("<b><i>%s</i></b>", s1);
s = xs_str_cat(s, s2);
}
else
if (xs_startswith(v, "**")) {
- xs *s1 = xs_crop_i(xs_dup(v), 2, -2);
+ xs *s1 = xs_strip_chars_i(xs_dup(v), "*");
xs *s2 = xs_fmt("<b>%s</b>", s1);
s = xs_str_cat(s, s2);
}
else
if (xs_startswith(v, "*")) {
- xs *s1 = xs_crop_i(xs_dup(v), 1, -1);
+ xs *s1 = xs_strip_chars_i(xs_dup(v), "*");
xs *s2 = xs_fmt("<i>%s</i>", s1);
s = xs_str_cat(s, s2);
}
else
+ if (xs_startswith(v, "~~")) {
+ xs *s1 = xs_strip_chars_i(xs_dup(v), "~");
+ xs *e1 = encode_html(s1);
+ xs *s2 = xs_fmt("<s>%s</s>", e1);
+ s = xs_str_cat(s, s2);
+ }
+ else
if (xs_startswith(v, "http")) {
xs *u = xs_replace(v, "#", "&#35;");
xs *v2 = xs_strip_chars_i(xs_dup(u), ".,)");