snac2

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

commit 26a3b260d56cedf0ca56b331d8bec71d1a8b49f8
parent e0c01956166c9fe14b734750e82f7c209ffcf499
Author: default <nobody@localhost>
Date:   Tue, 27 Sep 2022 09:38:46 +0200

Started function not_really_markdown().

Diffstat:
Mactivitypub.c | 3++-
Mhtml.c | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mmain.c | 5+++++
Msnac.h | 2++
4 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/activitypub.c b/activitypub.c @@ -32,7 +32,8 @@ int activitypub_request(snac *snac, char *url, d_char **data) /* ensure it's ActivityPub data */ ctype = xs_dict_get(response, "content-type"); - if (xs_str_in(ctype, "application/activity+json") != -1) + if (xs_str_in(ctype, "application/activity+json") != -1 || + xs_str_in(ctype, "application/ld+json") != -1) *data = xs_json_loads(payload); else status = 500; diff --git a/html.c b/html.c @@ -7,3 +7,68 @@ #include "snac.h" +d_char *not_really_markdown(char *content, d_char **f_content) +/* formats a content using some Markdown rules */ +{ + d_char *s = NULL; + int in_pre = 0; + int in_blq = 0; + xs *list; + char *p, *v; + + s = xs_str_new(NULL); + + p = list = xs_split(content, "\n"); + + while (xs_list_iter(&p, &v)) { + xs *ss = xs_strip(xs_dup(v)); + + if (xs_startswith(ss, "```")) { + if (!in_pre) + s = xs_str_cat(s, "<pre>"); + else + s = xs_str_cat(s, "</pre>"); + + in_pre = !in_pre; + continue; + } + + if (xs_startswith(ss, ">")) { + /* delete the > and subsequent spaces */ + ss = xs_strip(xs_crop(ss, 1, 0)); + + if (!in_blq) { + s = xs_str_cat(s, "<blockquote>"); + in_blq = 1; + } + + s = xs_str_cat(s, ss); + s = xs_str_cat(s, "<br>"); + + continue; + } + + if (in_blq) { + s = xs_str_cat(s, "</blockquote>"); + in_blq = 0; + } + + s = xs_str_cat(s, ss); + s = xs_str_cat(s, "<br>"); + } + + if (in_blq) + s = xs_str_cat(s, "</blockquote>"); + if (in_pre) + s = xs_str_cat(s, "</pre>"); + + /* some beauty fixes */ + if (xs_str_in(s, "</blockquote><br>") != -1) { + xs *os = s; + s = xs_replace(os, "</blockquote><br>", "</blockquote>"); + } + + *f_content = s; + + return *f_content; +} diff --git a/main.c b/main.c @@ -153,6 +153,11 @@ int main(int argc, char *argv[]) printf("status: %d\n", status); + if (valid_status(status)) { + xs *j = xs_json_dumps_pp(data, 4); + printf("%s\n", j); + } + return 0; } diff --git a/snac.h b/snac.h @@ -100,3 +100,5 @@ int activitypub_get_handler(d_char *req, char *q_path, int activitypub_post_handler(d_char *req, char *q_path, char *payload, int p_size, char **body, int *b_size, char **ctype); + +d_char *not_really_markdown(char *content, d_char **f_content);