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 +++++++++++++++++++++++---- tests/check_content_parser.c | 4 ++-- 2 files changed, 25 insertions(+), 6 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, "
\n"); + spaces = 0; + } + else + b_string_append_c(rv, c); + } + break; + case '&': if (state == 0) b_string_append(rv, "&"); diff --git a/tests/check_content_parser.c b/tests/check_content_parser.c index 49f07ba..0053051 100644 --- a/tests/check_content_parser.c +++ b/tests/check_content_parser.c @@ -33,7 +33,7 @@ test_content_parse(void **state) "bola\n" "chunda\n" "\n" - "> bola\n" + "> bola \n" "> guda\n" "> buga\n" "> \n" @@ -68,7 +68,7 @@ test_content_parse(void **state) "
seis
\n" "

bola\n" "chunda

\n" - "

bola\n" + "

bola
\n" "guda\n" "buga

\n" "
asd
\n" -- cgit v1.2.3-18-g5258