summaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authorLouis Brauer <louis@openbooking.ch>2024-05-27 12:25:38 +0200
committerLouis Brauer <louis@openbooking.ch>2024-05-27 12:25:38 +0200
commit4621a25ba476b8222b7fca8b545ad2489469f310 (patch)
treef6a406c42e5e8faae255d988505d654a29c188dc /format.c
parent81cf309e4d0ba6c2debccc21ea4f85e1e6245dc5 (diff)
parent36764b8ade5ee4686b04acb251f586eec4dacfad (diff)
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'format.c')
-rw-r--r--format.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/format.c b/format.c
index b021f55..1020ddd 100644
--- a/format.c
+++ b/format.c
@@ -87,7 +87,12 @@ static xs_str *format_line(const char *line, xs_list **attach)
/* split by markup */
xs *sm = xs_regex_split(line,
- "(`[^`]+`|\\*\\*?[^\\*]+\\*?\\*|https?:/" "/[^[:space:]]+)");
+ "("
+ "`[^`]+`" "|"
+ "\\*\\*?[^\\*]+\\*?\\*" "|"
+ "\\[[^]]+\\]\\([^\\)]+\\)" "|"
+ "https?:/" "/[^[:space:]]+"
+ ")");
int n = 0;
p = sm;
@@ -136,6 +141,21 @@ static xs_str *format_line(const char *line, xs_list **attach)
}
}
else
+ if (*v == '[') {
+ /* markdown-like links [label](url) */
+ xs *w = xs_strip_chars_i(xs_dup(v), "[)");
+ xs *l = xs_split_n(w, "](", 1);
+
+ if (xs_list_len(l) == 2) {
+ xs *link = xs_fmt("<a href=\"%s\">%s</a>",
+ xs_list_get(l, 1), xs_list_get(l, 0));
+
+ s = xs_str_cat(s, link);
+ }
+ else
+ s = xs_str_cat(s, v);
+ }
+ else
s = xs_str_cat(s, v);
}
else