From 24105f6e9759b74c04522de1de12ddb77cfba568 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Thu, 22 May 2025 03:34:48 +0300 Subject: use utf-8 lowercase function for tags #396 --- format.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'format.c') diff --git a/format.c b/format.c index 2f30a0d..0f844cd 100644 --- a/format.c +++ b/format.c @@ -8,6 +8,7 @@ #include "xs_json.h" #include "xs_time.h" #include "xs_match.h" +#include "xs_unicode.h" #include "snac.h" @@ -443,7 +444,7 @@ xs_str *sanitize(const char *content) if (n & 0x1) { xs *s1 = xs_strip_i(xs_crop_i(xs_dup(v), v[1] == '/' ? 2 : 1, -1)); xs *l1 = xs_split_n(s1, " ", 1); - xs *tag = xs_tolower_i(xs_dup(xs_list_get(l1, 0))); + xs *tag = xs_utf8_to_lower(xs_dup(xs_list_get(l1, 0))); xs *s2 = NULL; int i; -- cgit v1.2.3 From 56816b305155fee2154c7991ba9be8c0e7671307 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 22 May 2025 11:18:48 +0200 Subject: Minor memory leak fixes. --- format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'format.c') diff --git a/format.c b/format.c index 0f844cd..9bad391 100644 --- a/format.c +++ b/format.c @@ -444,7 +444,7 @@ xs_str *sanitize(const char *content) if (n & 0x1) { xs *s1 = xs_strip_i(xs_crop_i(xs_dup(v), v[1] == '/' ? 2 : 1, -1)); xs *l1 = xs_split_n(s1, " ", 1); - xs *tag = xs_utf8_to_lower(xs_dup(xs_list_get(l1, 0))); + xs *tag = xs_utf8_to_lower(xs_list_get(l1, 0)); xs *s2 = NULL; int i; -- cgit v1.2.3 From 22f326ed66a5371fddbac739e0a7ce6f7e5cb658 Mon Sep 17 00:00:00 2001 From: grunfink Date: Wed, 4 Jun 2025 06:57:13 +0200 Subject: Fixed markdown links with parenthesis. --- format.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'format.c') diff --git a/format.c b/format.c index 9bad391..7b18909 100644 --- a/format.c +++ b/format.c @@ -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, "#", "#"), "@", "@"), - "![)"); + xs *w = xs_replace_i(xs_replace(v, "#", "#"), "@", "@"); xs *l = xs_split_n(w, "](", 1); 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("%s", url, name); @@ -168,15 +169,17 @@ static xs_str *format_line(const char *line, xs_list **attach) else if (*v == '!') { /* markdown-like images ![alt text](url to image) */ - xs *w = xs_strip_chars_i( - xs_replace_i(xs_replace(v, "#", "#"), "@", "@"), - "![)"); + xs *w = xs_replace_i(xs_replace(v, "#", "#"), "@", "@"); 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); + 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; -- cgit v1.2.3