commit 2384a5409bc3a8a6ede4bf33bb1584a6bfae39af
parent ea0c128cf0067946cab47bdce09df791be8038f5
Author: default <nobody@localhost>
Date: Thu, 26 Dec 2024 03:55:27 +0100
Make xmpp and mailto URLs clickable.
Diffstat:
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/format.c b/format.c
@@ -7,6 +7,7 @@
#include "xs_html.h"
#include "xs_json.h"
#include "xs_time.h"
+#include "xs_match.h"
#include "snac.h"
@@ -93,7 +94,8 @@ static xs_str *format_line(const char *line, xs_list **attach)
"\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
"!\\[[^]]+\\]\\([^\\)]+\\)" "|"
"\\[[^]]+\\]\\([^\\)]+\\)" "|"
- "[a-z]+:/" "/[^[:space:]]+"
+ "[a-z]+:/" "/[^[:space:]]+" "|"
+ "(mailto|xmpp):[^@[:space:]]+@[^[:space:]]+"
")");
int n = 0;
@@ -230,6 +232,15 @@ static xs_str *format_line(const char *line, xs_list **attach)
}
}
else
+ if (xs_match(v, "mailto*|xmpp*")) {
+ xs *u = xs_replace_i(xs_replace(v, "#", "#"), "@", "@");
+
+ xs *v2 = xs_strip_chars_i(xs_dup(u), ".,)");
+
+ xs *s1 = xs_fmt("<a href=\"%s\" target=\"_blank\">%s</a>", v2, u);
+ s = xs_str_cat(s, s1);
+ }
+ else
s = xs_str_cat(s, v);
}
else
diff --git a/html.c b/html.c
@@ -934,7 +934,7 @@ static xs_html *html_user_body(snac *user, int read_only)
}
}
else
- if (xs_startswith(v, "gemini:/")) {
+ if (xs_startswith(v, "gemini:/") || xs_startswith(v, "xmpp:")) {
value = xs_html_tag("a",
xs_html_attr("rel", "me"),
xs_html_attr("href", v),