From 2384a5409bc3a8a6ede4bf33bb1584a6bfae39af Mon Sep 17 00:00:00 2001 From: default Date: Thu, 26 Dec 2024 03:55:27 +0100 Subject: [PATCH] Make xmpp and mailto URLs clickable. --- format.c | 13 ++++++++++++- html.c | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/format.c b/format.c index 12783ae..41e4162 100644 --- 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; @@ -229,6 +231,15 @@ static xs_str *format_line(const char *line, xs_list **attach) s = xs_str_cat(s, s1); } } + 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("%s", v2, u); + s = xs_str_cat(s, s1); + } else s = xs_str_cat(s, v); } diff --git a/html.c b/html.c index 2c0a823..409023d 100644 --- 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),