diff options
| author | 2025-06-04 06:57:13 +0200 | |
|---|---|---|
| committer | 2025-06-04 06:57:13 +0200 | |
| commit | 22f326ed66a5371fddbac739e0a7ce6f7e5cb658 (patch) | |
| tree | dd2fcc2bdd33ce9b7516b26fdec4c0350219f194 /format.c | |
| parent | Minor tweak. (diff) | |
| download | snac2-22f326ed66a5371fddbac739e0a7ce6f7e5cb658.tar.gz snac2-22f326ed66a5371fddbac739e0a7ce6f7e5cb658.tar.xz snac2-22f326ed66a5371fddbac739e0a7ce6f7e5cb658.zip | |
Fixed markdown links with parenthesis.
Diffstat (limited to 'format.c')
| -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) | |||
| 96 | "~~[^~]+~~" "|" | 96 | "~~[^~]+~~" "|" |
| 97 | "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|" | 97 | "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|" |
| 98 | "__[^_]+__" "|" //anzu | 98 | "__[^_]+__" "|" //anzu |
| 99 | "!\\[[^]]+\\]\\([^\\)]+\\)" "|" | 99 | "!\\[[^]]+\\]\\([^\\)]+\\)\\)?" "|" |
| 100 | "\\[[^]]+\\]\\([^\\)]+\\)" "|" | 100 | "\\[[^]]+\\]\\([^\\)]+\\)\\)?" "|" |
| 101 | "[a-z]+:/" "/" NOSPACE "|" | 101 | "[a-z]+:/" "/" NOSPACE "|" |
| 102 | "(mailto|xmpp):[^@[:space:]]+@" NOSPACE | 102 | "(mailto|xmpp):[^@[:space:]]+@" NOSPACE |
| 103 | ")"); | 103 | ")"); |
| @@ -149,14 +149,15 @@ static xs_str *format_line(const char *line, xs_list **attach) | |||
| 149 | else | 149 | else |
| 150 | if (*v == '[') { | 150 | if (*v == '[') { |
| 151 | /* markdown-like links [label](url) */ | 151 | /* markdown-like links [label](url) */ |
| 152 | xs *w = xs_strip_chars_i( | 152 | xs *w = xs_replace_i(xs_replace(v, "#", "#"), "@", "@"); |
| 153 | xs_replace_i(xs_replace(v, "#", "#"), "@", "@"), | ||
| 154 | "; | 153 | xs *l = xs_split_n(w, "](", 1); |
| 156 | 154 | ||
| 157 | if (xs_list_len(l) == 2) { | 155 | if (xs_list_len(l) == 2) { |
| 158 | const char *name = xs_list_get(l, 0); | 156 | xs *name = xs_dup(xs_list_get(l, 0)); |
| 159 | const char *url = xs_list_get(l, 1); | 157 | xs *url = xs_dup(xs_list_get(l, 1)); |
| 158 | |||
| 159 | name = xs_crop_i(name, 1, 0); | ||
| 160 | url = xs_crop_i(url, 0, -1); | ||
| 160 | 161 | ||
| 161 | xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name); | 162 | xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name); |
| 162 | 163 | ||
| @@ -168,15 +169,17 @@ static xs_str *format_line(const char *line, xs_list **attach) | |||
| 168 | else | 169 | else |
| 169 | if (*v == '!') { | 170 | if (*v == '!') { |
| 170 | /* markdown-like images  */ | 171 | /* markdown-like images  */ |
| 171 | xs *w = xs_strip_chars_i( | 172 | xs *w = xs_replace_i(xs_replace(v, "#", "#"), "@", "@"); |
| 172 | xs_replace_i(xs_replace(v, "#", "#"), "@", "@"), | ||
| 173 | "; | 173 | xs *l = xs_split_n(w, "](", 1); |
| 175 | 174 | ||
| 176 | if (xs_list_len(l) == 2) { | 175 | if (xs_list_len(l) == 2) { |
| 177 | const char *alt_text = xs_list_get(l, 0); | 176 | xs *alt_text = xs_dup(xs_list_get(l, 0)); |
| 178 | const char *img_url = xs_list_get(l, 1); | 177 | xs *img_url = xs_dup(xs_list_get(l, 1)); |
| 179 | const char *mime = xs_mime_by_ext(img_url); | 178 | |
| 179 | alt_text = xs_crop_i(alt_text, 2, 0); | ||
| 180 | img_url = xs_crop_i(img_url, 0, -1); | ||
| 181 | |||
| 182 | const char *mime = xs_mime_by_ext(img_url); | ||
| 180 | 183 | ||
| 181 | if (attach != NULL && xs_startswith(mime, "image/")) { | 184 | if (attach != NULL && xs_startswith(mime, "image/")) { |
| 182 | const xs_dict *ad; | 185 | const xs_dict *ad; |