Przeglądaj źródła

More work in not_really_markdown().

default 3 lat temu
rodzic
commit
4f3b70d997
4 zmienionych plików z 64 dodań i 4 usunięć
  1. 2 2
      Makefile
  2. 58 2
      html.c
  3. 3 0
      httpd.c
  4. 1 0
      snac.c

+ 2 - 2
Makefile

@@ -17,11 +17,11 @@ dep:
 activitypub.o: activitypub.c xs.h xs_encdec.h xs_json.h xs_curl.h \
  xs_mime.h xs_openssl.h snac.h
 data.o: data.c xs.h xs_io.h xs_json.h xs_openssl.h snac.h
-html.o: html.c xs.h xs_io.h xs_json.h snac.h
+html.o: html.c xs.h xs_io.h xs_json.h xs_regex.h snac.h
 http.o: http.c xs.h xs_io.h xs_encdec.h xs_openssl.h xs_curl.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
 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 snac.h
+ xs_socket.h xs_httpd.h xs_mime.h xs_regex.h snac.h
 webfinger.o: webfinger.c xs.h xs_encdec.h xs_json.h xs_curl.h snac.h

+ 58 - 2
html.c

@@ -4,6 +4,7 @@
 #include "xs.h"
 #include "xs_io.h"
 #include "xs_json.h"
+#include "xs_regex.h"
 
 #include "snac.h"
 
@@ -15,10 +16,65 @@ d_char *not_really_markdown(char *content, d_char **f_content)
     int in_blq = 0;
     xs *list;
     char *p, *v;
+    xs *wrk = xs_dup(content);
 
-    s = xs_str_new(NULL);
+    /* global changes */
+    {
+        /* backticks */
+        xs *ml = xs_regex_matchall(wrk, "`[^`]+`");
+        p = ml;
+
+        while (xs_list_iter(&p, &v)) {
+            xs *s1 = xs_crop(xs_dup(v), 1, -1);
+            xs *s2 = xs_fmt("<code>%s</code>", s1);
+
+            wrk = xs_replace_i(wrk, v, s2);
+        }
+    }
+
+    {
+        /* double asterisks */
+        xs *ml = xs_regex_matchall(wrk, "\\*\\*[^\\*]+\\*\\*");
+        p = ml;
+
+        while (xs_list_iter(&p, &v)) {
+            xs *s1 = xs_crop(xs_dup(v), 2, -2);
+            xs *s2 = xs_fmt("<b>%s</b>", s1);
+
+            wrk = xs_replace_i(wrk, v, s2);
+        }
+    }
+
+    {
+        /* single asterisks */
+        xs *ml = xs_regex_matchall(wrk, "\\*[^\\*]+\\*");
+        p = ml;
+
+        while (xs_list_iter(&p, &v)) {
+            xs *s1 = xs_crop(xs_dup(v), 1, -1);
+            xs *s2 = xs_fmt("<i>%s</i>", s1);
 
-    p = list = xs_split(content, "\n");
+            wrk = xs_replace_i(wrk, v, s2);
+        }
+    }
+
+    {
+        /* urls */
+        xs *ml = xs_regex_matchall(wrk, "https?:/" "/[^ ]+");
+        p = ml;
+
+        while (xs_list_iter(&p, &v)) {
+            xs *s2 = xs_fmt("<a href=\"%s\">%s</a>", v, v);
+
+            wrk = xs_replace_i(wrk, v, s2);
+        }
+    }
+
+    /* now work on 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));

+ 3 - 0
httpd.c

@@ -79,6 +79,9 @@ int server_get_handler(d_char *req, char *q_path,
         *ctype = "image/png";
     }
 
+    if (status != 0)
+        srv_debug(1, xs_fmt("server_get_handler '%s' %d", q_path, status));
+
     return status;
 }
 

+ 1 - 0
snac.c

@@ -12,6 +12,7 @@
 #include "xs_socket.h"
 #include "xs_httpd.h"
 #include "xs_mime.h"
+#include "xs_regex.h"
 
 #include "snac.h"