Przeglądaj źródła

Started function not_really_markdown().

default 3 lat temu
rodzic
commit
26a3b260d5
4 zmienionych plików z 74 dodań i 1 usunięć
  1. 2 1
      activitypub.c
  2. 65 0
      html.c
  3. 5 0
      main.c
  4. 2 0
      snac.h

+ 2 - 1
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;

+ 65 - 0
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;
+}

+ 5 - 0
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;
     }
 

+ 2 - 0
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);