diff options
| author | grunfink <grunfink@comam.es> | 2025-06-04 06:57:13 +0200 |
|---|---|---|
| committer | grunfink <grunfink@comam.es> | 2025-06-04 06:57:13 +0200 |
| commit | 22f326ed66a5371fddbac739e0a7ce6f7e5cb658 (patch) | |
| tree | dd2fcc2bdd33ce9b7516b26fdec4c0350219f194 | |
| parent | f0509f8b2b8df704226a94e9af8c06c3065234d4 (diff) | |
Fixed markdown links with parenthesis.
| -rw-r--r-- | format.c | 29 |
1 files changed, 16 insertions, 13 deletions
@@ -96,8 +96,8 @@ static xs_str *format_line(const char *line, xs_list **attach) "~~[^~]+~~" "|" "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|" "__[^_]+__" "|" //anzu - "!\\[[^]]+\\]\\([^\\)]+\\)" "|" - "\\[[^]]+\\]\\([^\\)]+\\)" "|" + "!\\[[^]]+\\]\\([^\\)]+\\)\\)?" "|" + "\\[[^]]+\\]\\([^\\)]+\\)\\)?" "|" "[a-z]+:/" "/" NOSPACE "|" "(mailto|xmpp):[^@[:space:]]+@" NOSPACE ")"); @@ -149,14 +149,15 @@ 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_replace_i(xs_replace(v, "#", "#"), "@", "@"), - "; if (xs_list_len(l) == 2) { - const char *name = xs_list_get(l, 0); - const char *url = xs_list_get(l, 1); + xs *name = xs_dup(xs_list_get(l, 0)); + xs *url = xs_dup(xs_list_get(l, 1)); + + name = xs_crop_i(name, 1, 0); + url = xs_crop_i(url, 0, -1); xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name); @@ -168,15 +169,17 @@ static xs_str *format_line(const char *line, xs_list **attach) else if (*v == '!') { /* markdown-like images  */ - xs *w = xs_strip_chars_i( - xs_replace_i(xs_replace(v, "#", "#"), "@", "@"), - "; if (xs_list_len(l) == 2) { - const char *alt_text = xs_list_get(l, 0); - const char *img_url = xs_list_get(l, 1); - const char *mime = xs_mime_by_ext(img_url); + xs *alt_text = xs_dup(xs_list_get(l, 0)); + xs *img_url = xs_dup(xs_list_get(l, 1)); + + alt_text = xs_crop_i(alt_text, 2, 0); + img_url = xs_crop_i(img_url, 0, -1); + + const char *mime = xs_mime_by_ext(img_url); if (attach != NULL && xs_startswith(mime, "image/")) { const xs_dict *ad; |