snac2

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

commit 4f3b70d9979b22cfc1a789b14602a12ee5c896c7
parent 25258ed379a16a72778ed45cca2a297483d002e6
Author: default <nobody@localhost>
Date:   Tue, 27 Sep 2022 10:51:50 +0200

More work in not_really_markdown().

Diffstat:
MMakefile | 4++--
Mhtml.c | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mhttpd.c | 3+++
Msnac.c | 1+
4 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile @@ -17,11 +17,11 @@ dep: activitypub.o: activitypub.c xs.h xs_encdec.h xs_json.h xs_curl.h \ xs_mime.h xs_openssl.h snac.h data.o: data.c xs.h xs_io.h xs_json.h xs_openssl.h snac.h -html.o: html.c xs.h xs_io.h xs_json.h snac.h +html.o: html.c xs.h xs_io.h xs_json.h xs_regex.h snac.h http.o: http.c xs.h xs_io.h xs_encdec.h xs_openssl.h xs_curl.h snac.h httpd.o: httpd.c xs.h xs_io.h xs_encdec.h xs_json.h xs_socket.h \ xs_httpd.h snac.h main.o: main.c xs.h xs_io.h xs_encdec.h xs_json.h snac.h snac.o: snac.c xs.h xs_io.h xs_encdec.h xs_json.h xs_curl.h xs_openssl.h \ - xs_socket.h xs_httpd.h xs_mime.h snac.h + xs_socket.h xs_httpd.h xs_mime.h xs_regex.h snac.h webfinger.o: webfinger.c xs.h xs_encdec.h xs_json.h xs_curl.h snac.h diff --git a/html.c b/html.c @@ -4,6 +4,7 @@ #include "xs.h" #include "xs_io.h" #include "xs_json.h" +#include "xs_regex.h" #include "snac.h" @@ -15,10 +16,65 @@ d_char *not_really_markdown(char *content, d_char **f_content) int in_blq = 0; xs *list; char *p, *v; + xs *wrk = xs_dup(content); - s = xs_str_new(NULL); + /* global changes */ + { + /* backticks */ + xs *ml = xs_regex_matchall(wrk, "`[^`]+`"); + p = ml; + + while (xs_list_iter(&p, &v)) { + xs *s1 = xs_crop(xs_dup(v), 1, -1); + xs *s2 = xs_fmt("<code>%s</code>", s1); + + wrk = xs_replace_i(wrk, v, s2); + } + } + + { + /* double asterisks */ + xs *ml = xs_regex_matchall(wrk, "\\*\\*[^\\*]+\\*\\*"); + p = ml; + + while (xs_list_iter(&p, &v)) { + xs *s1 = xs_crop(xs_dup(v), 2, -2); + xs *s2 = xs_fmt("<b>%s</b>", s1); + + wrk = xs_replace_i(wrk, v, s2); + } + } + + { + /* single asterisks */ + xs *ml = xs_regex_matchall(wrk, "\\*[^\\*]+\\*"); + p = ml; + + while (xs_list_iter(&p, &v)) { + xs *s1 = xs_crop(xs_dup(v), 1, -1); + xs *s2 = xs_fmt("<i>%s</i>", s1); - p = list = xs_split(content, "\n"); + wrk = xs_replace_i(wrk, v, s2); + } + } + + { + /* urls */ + xs *ml = xs_regex_matchall(wrk, "https?:/" "/[^ ]+"); + p = ml; + + while (xs_list_iter(&p, &v)) { + xs *s2 = xs_fmt("<a href=\"%s\">%s</a>", v, v); + + wrk = xs_replace_i(wrk, v, s2); + } + } + + /* now work on lines */ + + p = list = xs_split(wrk, "\n"); + + s = xs_str_new(NULL); while (xs_list_iter(&p, &v)) { xs *ss = xs_strip(xs_dup(v)); diff --git a/httpd.c b/httpd.c @@ -79,6 +79,9 @@ int server_get_handler(d_char *req, char *q_path, *ctype = "image/png"; } + if (status != 0) + srv_debug(1, xs_fmt("server_get_handler '%s' %d", q_path, status)); + return status; } diff --git a/snac.c b/snac.c @@ -12,6 +12,7 @@ #include "xs_socket.h" #include "xs_httpd.h" #include "xs_mime.h" +#include "xs_regex.h" #include "snac.h"