From ae6443e44a2a6e242cf97d58e608e6f21dcdc464 Mon Sep 17 00:00:00 2001 From: "Rafael G. Martins" Date: Tue, 12 May 2015 19:31:03 -0300 Subject: content-parser: implemented line breaks --- src/content-parser.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/content-parser.c') 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, "
\n"); + spaces = 0; + } + else + b_string_append_c(rv, c); + } + break; + case '&': if (state == 0) b_string_append(rv, "&"); -- cgit v1.2.3-18-g5258