snac2

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

commit 3d677f67d845cf6e74271681e76d3cb806036483
parent 7add876a9334e87138be7edf72db35832755e118
Author: default <nobody@localhost>
Date:   Tue, 21 Jan 2025 14:33:21 +0100

Added more Markdown (contributed by an-im-dugud).

Diffstat:
Mformat.c | 47++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/format.c b/format.c @@ -92,6 +92,8 @@ static xs_str *format_line(const char *line, xs_list **attach) "`[^`]+`" "|" "~~[^~]+~~" "|" "\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|" + "_[^_]+_" "|" //anzu + "__[^_]+__" "|" //anzu "!\\[[^]]+\\]\\([^\\)]+\\)" "|" "\\[[^]]+\\]\\([^\\)]+\\)" "|" "[a-z]+:/" "/[^[:space:]]+" "|" @@ -127,6 +129,20 @@ static xs_str *format_line(const char *line, xs_list **attach) xs *s2 = xs_fmt("<i>%s</i>", s1); s = xs_str_cat(s, s2); } + //anzu - begin + else + if (xs_startswith(v, "__")) { + xs *s1 = xs_strip_chars_i(xs_dup(v), "_"); + xs *s2 = xs_fmt("<u>%s</u>", s1); + s = xs_str_cat(s, s2); + } + else + if (xs_startswith(v, "_")) { + xs *s1 = xs_strip_chars_i(xs_dup(v), "_"); + xs *s2 = xs_fmt("<i>%s</i>", s1); + s = xs_str_cat(s, s2); + } + //anzu - end else if (xs_startswith(v, "~~")) { xs *s1 = xs_strip_chars_i(xs_dup(v), "~"); @@ -303,6 +319,31 @@ xs_str *not_really_markdown(const char *content, xs_list **attach, xs_list **tag continue; } + //anzu - begin + // h1 reserved for snac? + if (xs_startswith(ss, "# ")) { + ss = xs_strip_i(xs_crop_i(ss, 2, 0)); + s = xs_str_cat(s, "<h2>"); + s = xs_str_cat(s, ss); + s = xs_str_cat(s, "</h2>"); + continue; + } + if (xs_startswith(ss, "## ")) { + ss = xs_strip_i(xs_crop_i(ss, 3, 0)); + s = xs_str_cat(s, "<h2>"); + s = xs_str_cat(s, ss); + s = xs_str_cat(s, "</h2>"); + continue; + } + if (xs_startswith(ss, "### ")) { + ss = xs_strip_i(xs_crop_i(ss, 4, 0)); + s = xs_str_cat(s, "<h3>"); + s = xs_str_cat(s, ss); + s = xs_str_cat(s, "</h3>"); + continue; + } + //anzu - end + if (xs_startswith(ss, ">")) { /* delete the > and subsequent spaces */ ss = xs_strip_i(xs_crop_i(ss, 1, 0)); @@ -336,6 +377,8 @@ xs_str *not_really_markdown(const char *content, xs_list **attach, xs_list **tag s = xs_replace_i(s, "<br><br><blockquote>", "<br><blockquote>"); s = xs_replace_i(s, "</blockquote><br>", "</blockquote>"); s = xs_replace_i(s, "</pre><br>", "</pre>"); + s = xs_replace_i(s, "</h2><br>", "</h2>"); //anzu ??? + s = xs_replace_i(s, "</h3><br>", "</h3>"); //anzu ??? { /* traditional emoticons */ @@ -378,7 +421,9 @@ xs_str *not_really_markdown(const char *content, xs_list **attach, xs_list **tag const char *valid_tags[] = { "a", "p", "br", "br/", "blockquote", "ul", "ol", "li", "cite", "small", - "span", "i", "b", "u", "s", "pre", "code", "em", "strong", "hr", "img", "del", "bdi", NULL + "span", "i", "b", "u", "s", "pre", "code", "em", "strong", "hr", "img", "del", "bdi", + "h2","h3", //anzu + NULL }; xs_str *sanitize(const char *content)