diff options
author | default <nobody@localhost> | 2022-09-27 09:38:46 +0200 |
---|---|---|
committer | default <nobody@localhost> | 2022-09-27 09:38:46 +0200 |
commit | 26a3b260d56cedf0ca56b331d8bec71d1a8b49f8 (patch) | |
tree | 16168d7f2a96a91d666786af03d1355b3f90b412 /html.c | |
parent | e0c01956166c9fe14b734750e82f7c209ffcf499 (diff) |
Started function not_really_markdown().
Diffstat (limited to 'html.c')
-rw-r--r-- | html.c | 65 |
1 files changed, 65 insertions, 0 deletions
@@ -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; +} |