diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/content-parser.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/content-parser.c b/src/content-parser.c index f19b800..aa4db79 100644 --- a/src/content-parser.c +++ b/src/content-parser.c @@ -16,14 +16,10 @@ #include "utils/utils.h" #include "content-parser.h" - // this is a half ass implementation of a markdown-like syntax. bugs are // expected. feel free to improve the parser and and new features. -// TODO: inline elements: line breaks - - typedef enum { CONTENT_START_LINE = 1, CONTENT_HEADER, @@ -76,6 +72,7 @@ blogc_content_parse_inline(const char *src) char *tmp2 = NULL; unsigned int open_bracket = 0; + unsigned int spaces = 0; bool escape = false; @@ -91,6 +88,9 @@ blogc_content_parse_inline(const char *src) continue; } + if (c != ' ' && c != '\n' && c != '\r') + spaces = 0; + switch (c) { case '\\': @@ -244,6 +244,25 @@ blogc_content_parse_inline(const char *src) b_string_append_c(rv, c); break; + case ' ': + if (state == 0) { + spaces++; + b_string_append_c(rv, c); + } + break; + + case '\n': + case '\r': + if (state == 0) { + if (spaces >= 2) { + b_string_append(rv, "<br />\n"); + spaces = 0; + } + else + b_string_append_c(rv, c); + } + break; + case '&': if (state == 0) b_string_append(rv, "&"); |