snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

commit 2384a5409bc3a8a6ede4bf33bb1584a6bfae39af
parent ea0c128cf0067946cab47bdce09df791be8038f5
Author: default <nobody@localhost>
Date:   Thu, 26 Dec 2024 03:55:27 +0100

Make xmpp and mailto URLs clickable.

Diffstat:
Mformat.c | 13++++++++++++-
Mhtml.c | 2+-
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, "#", "&#35;"), "@", "&#64;"); + + 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),