summaryrefslogtreecommitdiff
path: root/format.c
diff options
context:
space:
mode:
authorGravatar Oliver2025-07-16 20:21:20 +0200
committerGravatar Oliver2025-07-16 20:21:20 +0200
commit3554a73aa50526631961efcca78c6c8eb2a16911 (patch)
treefc4c21a65337ab8ecb4fb00aa551ee21997faf6f /format.c
parentpo/de_DE.po aktualisiert (diff)
parentUpdated RELEASE_NOTES. (diff)
downloadpenes-snac2-3554a73aa50526631961efcca78c6c8eb2a16911.tar.gz
penes-snac2-3554a73aa50526631961efcca78c6c8eb2a16911.tar.xz
penes-snac2-3554a73aa50526631961efcca78c6c8eb2a16911.zip
Merge pull request 'master' (#9) from grunfink/snac2:master into master
Reviewed-on: https://codeberg.org/zen/snac2/pulls/9
Diffstat (limited to 'format.c')
-rw-r--r--format.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/format.c b/format.c
index 2f30a0d..7b18909 100644
--- a/format.c
+++ b/format.c
@@ -8,6 +8,7 @@
8#include "xs_json.h" 8#include "xs_json.h"
9#include "xs_time.h" 9#include "xs_time.h"
10#include "xs_match.h" 10#include "xs_match.h"
11#include "xs_unicode.h"
11 12
12#include "snac.h" 13#include "snac.h"
13 14
@@ -95,8 +96,8 @@ static xs_str *format_line(const char *line, xs_list **attach)
95 "~~[^~]+~~" "|" 96 "~~[^~]+~~" "|"
96 "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|" 97 "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
97 "__[^_]+__" "|" //anzu 98 "__[^_]+__" "|" //anzu
98 "!\\[[^]]+\\]\\([^\\)]+\\)" "|" 99 "!\\[[^]]+\\]\\([^\\)]+\\)\\)?" "|"
99 "\\[[^]]+\\]\\([^\\)]+\\)" "|" 100 "\\[[^]]+\\]\\([^\\)]+\\)\\)?" "|"
100 "[a-z]+:/" "/" NOSPACE "|" 101 "[a-z]+:/" "/" NOSPACE "|"
101 "(mailto|xmpp):[^@[:space:]]+@" NOSPACE 102 "(mailto|xmpp):[^@[:space:]]+@" NOSPACE
102 ")"); 103 ")");
@@ -148,14 +149,15 @@ static xs_str *format_line(const char *line, xs_list **attach)
148 else 149 else
149 if (*v == '[') { 150 if (*v == '[') {
150 /* markdown-like links [label](url) */ 151 /* markdown-like links [label](url) */
151 xs *w = xs_strip_chars_i( 152 xs *w = xs_replace_i(xs_replace(v, "#", "#"), "@", "@");
152 xs_replace_i(xs_replace(v, "#", "#"), "@", "@"),
153 "![)");
154 xs *l = xs_split_n(w, "](", 1); 153 xs *l = xs_split_n(w, "](", 1);
155 154
156 if (xs_list_len(l) == 2) { 155 if (xs_list_len(l) == 2) {
157 const char *name = xs_list_get(l, 0); 156 xs *name = xs_dup(xs_list_get(l, 0));
158 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);
159 161
160 xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name); 162 xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name);
161 163
@@ -167,15 +169,17 @@ static xs_str *format_line(const char *line, xs_list **attach)
167 else 169 else
168 if (*v == '!') { 170 if (*v == '!') {
169 /* markdown-like images ![alt text](url to image) */ 171 /* markdown-like images ![alt text](url to image) */
170 xs *w = xs_strip_chars_i( 172 xs *w = xs_replace_i(xs_replace(v, "#", "&#35;"), "@", "&#64;");
171 xs_replace_i(xs_replace(v, "#", "&#35;"), "@", "&#64;"),
172 "![)");
173 xs *l = xs_split_n(w, "](", 1); 173 xs *l = xs_split_n(w, "](", 1);
174 174
175 if (xs_list_len(l) == 2) { 175 if (xs_list_len(l) == 2) {
176 const char *alt_text = xs_list_get(l, 0); 176 xs *alt_text = xs_dup(xs_list_get(l, 0));
177 const char *img_url = xs_list_get(l, 1); 177 xs *img_url = xs_dup(xs_list_get(l, 1));
178 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);
179 183
180 if (attach != NULL && xs_startswith(mime, "image/")) { 184 if (attach != NULL && xs_startswith(mime, "image/")) {
181 const xs_dict *ad; 185 const xs_dict *ad;
@@ -443,7 +447,7 @@ xs_str *sanitize(const char *content)
443 if (n & 0x1) { 447 if (n & 0x1) {
444 xs *s1 = xs_strip_i(xs_crop_i(xs_dup(v), v[1] == '/' ? 2 : 1, -1)); 448 xs *s1 = xs_strip_i(xs_crop_i(xs_dup(v), v[1] == '/' ? 2 : 1, -1));
445 xs *l1 = xs_split_n(s1, " ", 1); 449 xs *l1 = xs_split_n(s1, " ", 1);
446 xs *tag = xs_tolower_i(xs_dup(xs_list_get(l1, 0))); 450 xs *tag = xs_utf8_to_lower(xs_list_get(l1, 0));
447 xs *s2 = NULL; 451 xs *s2 = NULL;
448 int i; 452 int i;
449 453