Nikita Kalanakov 2 years ago
parent
commit
355c5446b4
1 changed files with 13 additions and 9 deletions
  1. 13 9
      makeshot/makeshot.c

+ 13 - 9
makeshot/makeshot.c

@@ -127,10 +127,11 @@ void buffer_append_data(buffer_t *buffer, unsigned char *data, size_t data_lengt
 }
 
 #define BUFFER_APPEND(b, s) buffer_append_data(b, s, strlen(s))
-#define BUFFER_CONCAT(b1, b2) {\
+#define BUFFER_CONCAT(b1, b2) buffer_append_data(b1, b2->data, b2->size)
+#define BUFFER_PREPROCESS(b1, b2) do {\
   buffer_append_data(b2, "\0", 1);\
   preprocess_text(b1, b2->data);\
-}
+} while(0)
 
 void buffer_append_escaped(buffer_t *buffer, char c) {
   switch (c) {
@@ -163,7 +164,7 @@ void buffer_append_escaped(buffer_t *buffer, char c) {
     buffer_append_data(buffer, &c, 1);
 }
 
-#define SET(s,tag) do {\
+#define SET(s,tag,pr) do {\
   buffer_t *temp_buffer;\
   uint_t k;\
   temp_buffer = new_buffer();\
@@ -175,7 +176,10 @@ void buffer_append_escaped(buffer_t *buffer, char c) {
       buffer_append_data(buffer, "<", 1);\
       BUFFER_APPEND(buffer, tag);\
       buffer_append_data(buffer, ">", 1);\
-      BUFFER_CONCAT(buffer, temp_buffer);\
+      if (pr)\
+        BUFFER_PREPROCESS(buffer, temp_buffer);\
+      else\
+        BUFFER_CONCAT(buffer, temp_buffer);\
       buffer_append_data(buffer, "</", 2);\
       BUFFER_APPEND(buffer, tag);\
       buffer_append_data(buffer, ">", 1);\
@@ -187,7 +191,7 @@ void buffer_append_escaped(buffer_t *buffer, char c) {
   }\
   i--;\
   BUFFER_APPEND(buffer, s);\
-  BUFFER_CONCAT(buffer, temp_buffer);\
+  BUFFER_PREPROCESS(buffer, temp_buffer);\
   free_buffer(temp_buffer);\
 } while(0)
 
@@ -199,13 +203,13 @@ void preprocess_text(buffer_t *buffer, char *text) {
     nc = text[i+1];
 
     if (c == '`')
-      SET("`", "tt");
+      SET("`", "tt", 0);
     else if (c == '*' && nc == '*')
-      SET("**", "b");
+      SET("**", "b", 1);
     else if (c == '_' && nc == '_')
-      SET("__", "i");
+      SET("__", "i", 1);
     else if (c == '~' && nc == '~')
-      SET("~~", "s");
+      SET("~~", "s", 1);
     else
       buffer_append_escaped(buffer, c);
 escape:;