diff options
author | Louis Brauer <louis@openbooking.ch> | 2024-05-27 12:25:38 +0200 |
---|---|---|
committer | Louis Brauer <louis@openbooking.ch> | 2024-05-27 12:25:38 +0200 |
commit | 4621a25ba476b8222b7fca8b545ad2489469f310 (patch) | |
tree | f6a406c42e5e8faae255d988505d654a29c188dc /format.c | |
parent | 81cf309e4d0ba6c2debccc21ea4f85e1e6245dc5 (diff) | |
parent | 36764b8ade5ee4686b04acb251f586eec4dacfad (diff) |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'format.c')
-rw-r--r-- | format.c | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -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 |