summaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2024-07-19 07:24:28 +0200
committerdefault <nobody@localhost>2024-07-19 07:24:28 +0200
commit5f6a42453c168b2fa63fdf15cfd65a5af7fc4680 (patch)
treed149ac84f2d3d389d9ff4de2f0e550ef7b67993b /format.c
parent6e3b621f7b84844ce18eb953fc7fba806472bef8 (diff)
Added support for markdown-like ![alt text](image url).
Diffstat (limited to 'format.c')
-rw-r--r--format.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/format.c b/format.c
index 170d28a..573b702 100644
--- a/format.c
+++ b/format.c
@@ -91,6 +91,7 @@ static xs_str *format_line(const char *line, xs_list **attach)
"`[^`]+`" "|"
"~~[^~]+~~" "|"
"\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
+ "!\\[[^]]+\\]\\([^\\)]+\\)" "|"
"\\[[^]]+\\]\\([^\\)]+\\)" "|"
"https?:/" "/[^[:space:]]+"
")");
@@ -170,6 +171,36 @@ static xs_str *format_line(const char *line, xs_list **attach)
s = xs_str_cat(s, v);
}
else
+ if (*v == '!') {
+ /* markdown-like images ![alt text](url to image) */
+ xs *w = xs_strip_chars_i(xs_replace(v, "#", "&#35;"), "![)");
+ xs *l = xs_split_n(w, "](", 1);
+
+ 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);
+
+ if (attach != NULL && xs_startswith(mime, "image/")) {
+ xs *d = xs_dict_new();
+
+ d = xs_dict_append(d, "mediaType", mime);
+ d = xs_dict_append(d, "url", img_url);
+ d = xs_dict_append(d, "name", alt_text);
+ d = xs_dict_append(d, "type", "Image");
+
+ *attach = xs_list_append(*attach, d);
+ }
+ else {
+ xs *link = xs_fmt("<a href=\"%s\">%s</a>", img_url, alt_text);
+
+ s = xs_str_cat(s, link);
+ }
+ }
+ else
+ s = xs_str_cat(s, v);
+ }
+ else
s = xs_str_cat(s, v);
}
else