commit 22f326e

grunfink  ·  2025-06-04 04:57:13 +0000 UTC
parent f0509f8
Fixed markdown links with parenthesis.
1 files changed,  +16, -13
+16, -13
 1@@ -96,8 +96,8 @@ static xs_str *format_line(const char *line, xs_list **attach)
 2             "~~[^~]+~~"                         "|"
 3             "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*"     "|"
 4             "__[^_]+__"                         "|" //anzu
 5-            "!\\[[^]]+\\]\\([^\\)]+\\)"         "|"
 6-            "\\[[^]]+\\]\\([^\\)]+\\)"          "|"
 7+            "!\\[[^]]+\\]\\([^\\)]+\\)\\)?"     "|"
 8+            "\\[[^]]+\\]\\([^\\)]+\\)\\)?"      "|"
 9             "[a-z]+:/" "/" NOSPACE              "|"
10             "(mailto|xmpp):[^@[:space:]]+@" NOSPACE
11         ")");
12@@ -149,14 +149,15 @@ static xs_str *format_line(const char *line, xs_list **attach)
13             else
14             if (*v == '[') {
15                 /* markdown-like links [label](url) */
16-                xs *w = xs_strip_chars_i(
17-                    xs_replace_i(xs_replace(v, "#", "#"), "@", "@"),
18-                "![)");
19+                xs *w = xs_replace_i(xs_replace(v, "#", "#"), "@", "@");
20                 xs *l = xs_split_n(w, "](", 1);
21 
22                 if (xs_list_len(l) == 2) {
23-                    const char *name = xs_list_get(l, 0);
24-                    const char *url  = xs_list_get(l, 1);
25+                    xs *name = xs_dup(xs_list_get(l, 0));
26+                    xs *url  = xs_dup(xs_list_get(l, 1));
27+
28+                    name = xs_crop_i(name, 1, 0);
29+                    url  = xs_crop_i(url, 0, -1);
30 
31                     xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name);
32 
33@@ -168,15 +169,17 @@ static xs_str *format_line(const char *line, xs_list **attach)
34             else
35             if (*v == '!') {
36                 /* markdown-like images ![alt text](url to image) */
37-                xs *w = xs_strip_chars_i(
38-                    xs_replace_i(xs_replace(v, "#", "&#35;"), "@", "&#64;"),
39-                "![)");
40+                xs *w = xs_replace_i(xs_replace(v, "#", "&#35;"), "@", "&#64;");
41                 xs *l = xs_split_n(w, "](", 1);
42 
43                 if (xs_list_len(l) == 2) {
44-                    const char *alt_text = xs_list_get(l, 0);
45-                    const char *img_url  = xs_list_get(l, 1);
46-                    const char *mime     = xs_mime_by_ext(img_url);
47+                    xs *alt_text = xs_dup(xs_list_get(l, 0));
48+                    xs *img_url  = xs_dup(xs_list_get(l, 1));
49+
50+                    alt_text = xs_crop_i(alt_text, 2, 0);
51+                    img_url  = xs_crop_i(img_url, 0, -1);
52+
53+                    const char *mime = xs_mime_by_ext(img_url);
54 
55                     if (attach != NULL && xs_startswith(mime, "image/")) {
56                         const xs_dict *ad;