|
@@ -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:;
|