Browse Source

Moved message formatting to format.c.

default 2 years ago
parent
commit
9aec7c9fa8
3 changed files with 127 additions and 119 deletions
  1. 11 9
      Makefile
  2. 116 0
      format.c
  3. 0 110
      html.c

+ 11 - 9
Makefile

@@ -3,7 +3,7 @@ CFLAGS=-g -Wall
 
 all: snac
 
-snac: snac.o main.o data.o http.o httpd.o webfinger.o activitypub.o html.o utils.o
+snac: snac.o main.o data.o http.o httpd.o webfinger.o activitypub.o html.o utils.o format.o
 	$(CC) -L/usr/local/lib *.o -lcurl -lcrypto -pthread -o $@
 
 .c.o:
@@ -25,17 +25,19 @@ install:
 	install -m 644 doc/snac.8 $(PREFIX)/man/man8/snac.8
 
 activitypub.o: activitypub.c xs.h xs_encdec.h xs_json.h xs_curl.h \
- xs_mime.h xs_openssl.h xs_regex.h xs_time.h snac.h
+  xs_mime.h xs_openssl.h xs_regex.h xs_time.h snac.h
 data.o: data.c xs.h xs_io.h xs_json.h xs_openssl.h xs_glob.h snac.h
+format.o: format.c xs.h xs_regex.h snac.h
 html.o: html.c xs.h xs_io.h xs_encdec.h xs_json.h xs_regex.h xs_set.h \
- xs_openssl.h xs_time.h snac.h
+  xs_openssl.h xs_time.h snac.h
 http.o: http.c xs.h xs_io.h xs_encdec.h xs_openssl.h xs_curl.h xs_time.h \
- snac.h
+  snac.h
 httpd.o: httpd.c xs.h xs_io.h xs_encdec.h xs_json.h xs_socket.h \
- xs_httpd.h snac.h
+  xs_httpd.h snac.h
 main.o: main.c xs.h xs_io.h xs_encdec.h xs_json.h snac.h
-snac.o: snac.c xs.h xs_io.h xs_encdec.h xs_json.h xs_curl.h xs_openssl.h \
- xs_socket.h xs_httpd.h xs_mime.h xs_regex.h xs_set.h xs_time.h xs_glob.h \
- snac.h
-utils.o: utils.c xs.h xs_io.h xs_encdec.h xs_json.h snac.h
+snac.o: snac.c xs.h xs_io.h xs_encdec.h xs_json.h xs_curl.h \
+  xs_openssl.h xs_socket.h xs_httpd.h xs_mime.h xs_regex.h xs_set.h \
+  xs_time.h xs_glob.h snac.h
+utils.o: utils.c xs.h xs_io.h xs_encdec.h xs_json.h xs_time.h \
+  xs_openssl.h snac.h
 webfinger.o: webfinger.c xs.h xs_encdec.h xs_json.h xs_curl.h snac.h

+ 116 - 0
format.c

@@ -0,0 +1,116 @@
+/* snac - A simple, minimalistic ActivityPub instance */
+/* copyright (c) 2022 grunfink - MIT license */
+
+#include "xs.h"
+#include "xs_regex.h"
+
+#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;
+    xs *wrk = xs_str_new(NULL);
+
+    {
+        /* split by special markup */
+        xs *sm = xs_regex_split(content,
+            "(`[^`]+`|\\*\\*?[^\\*]+\\*?\\*|https?:/" "/[^[:space:]]+)");
+        int n = 0;
+
+        p = sm;
+        while (xs_list_iter(&p, &v)) {
+            if ((n & 0x1)) {
+                /* markup */
+                if (xs_startswith(v, "`")) {
+                    xs *s1 = xs_crop(xs_dup(v), 1, -1);
+                    xs *s2 = xs_fmt("<code>%s</code>", s1);
+                    wrk = xs_str_cat(wrk, s2);
+                }
+                else
+                if (xs_startswith(v, "**")) {
+                    xs *s1 = xs_crop(xs_dup(v), 2, -2);
+                    xs *s2 = xs_fmt("<b>%s</b>", s1);
+                    wrk = xs_str_cat(wrk, s2);
+                }
+                else
+                if (xs_startswith(v, "*")) {
+                    xs *s1 = xs_crop(xs_dup(v), 1, -1);
+                    xs *s2 = xs_fmt("<i>%s</i>", s1);
+                    wrk = xs_str_cat(wrk, s2);
+                }
+                else
+                if (xs_startswith(v, "http")) {
+                    xs *s1 = xs_fmt("<a href=\"%s\">%s</a>", v, v);
+                    wrk = xs_str_cat(wrk, s1);
+                }
+                else
+                    /* what the hell is this */
+                    wrk = xs_str_cat(wrk, v);
+            }
+            else
+                /* surrounded text, copy directly */
+                wrk = xs_str_cat(wrk, v);
+
+            n++;
+        }
+    }
+
+    /* now work by lines */
+    p = list = xs_split(wrk, "\n");
+
+    s = xs_str_new(NULL);
+
+    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 */
+    s = xs_replace_i(s, "</blockquote><br>", "</blockquote>");
+
+    *f_content = s;
+
+    return *f_content;
+}

+ 0 - 110
html.c

@@ -12,116 +12,6 @@
 
 #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;
-    xs *wrk = xs_str_new(NULL);
-
-    {
-        /* split by special markup */
-        xs *sm = xs_regex_split(content,
-            "(`[^`]+`|\\*\\*?[^\\*]+\\*?\\*|https?:/" "/[^[:space:]]+)");
-        int n = 0;
-
-        p = sm;
-        while (xs_list_iter(&p, &v)) {
-            if ((n & 0x1)) {
-                /* markup */
-                if (xs_startswith(v, "`")) {
-                    xs *s1 = xs_crop(xs_dup(v), 1, -1);
-                    xs *s2 = xs_fmt("<code>%s</code>", s1);
-                    wrk = xs_str_cat(wrk, s2);
-                }
-                else
-                if (xs_startswith(v, "**")) {
-                    xs *s1 = xs_crop(xs_dup(v), 2, -2);
-                    xs *s2 = xs_fmt("<b>%s</b>", s1);
-                    wrk = xs_str_cat(wrk, s2);
-                }
-                else
-                if (xs_startswith(v, "*")) {
-                    xs *s1 = xs_crop(xs_dup(v), 1, -1);
-                    xs *s2 = xs_fmt("<i>%s</i>", s1);
-                    wrk = xs_str_cat(wrk, s2);
-                }
-                else
-                if (xs_startswith(v, "http")) {
-                    xs *s1 = xs_fmt("<a href=\"%s\">%s</a>", v, v);
-                    wrk = xs_str_cat(wrk, s1);
-                }
-                else
-                    /* what the hell is this */
-                    wrk = xs_str_cat(wrk, v);
-            }
-            else
-                /* surrounded text, copy directly */
-                wrk = xs_str_cat(wrk, v);
-
-            n++;
-        }
-    }
-
-    /* now work by lines */
-    p = list = xs_split(wrk, "\n");
-
-    s = xs_str_new(NULL);
-
-    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 */
-    s = xs_replace_i(s, "</blockquote><br>", "</blockquote>");
-
-    *f_content = s;
-
-    return *f_content;
-}
-
-
 int login(snac *snac, char *headers)
 /* tries a login */
 {