summaryrefslogtreecommitdiff
path: root/html.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2022-09-27 09:38:46 +0200
committerdefault <nobody@localhost>2022-09-27 09:38:46 +0200
commit26a3b260d56cedf0ca56b331d8bec71d1a8b49f8 (patch)
tree16168d7f2a96a91d666786af03d1355b3f90b412 /html.c
parente0c01956166c9fe14b734750e82f7c209ffcf499 (diff)
Started function not_really_markdown().
Diffstat (limited to 'html.c')
-rw-r--r--html.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/html.c b/html.c
index 2646e7d..de9060c 100644
--- 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;
+}