diff options
-rw-r--r-- | src/content-parser.c | 5 | ||||
-rw-r--r-- | tests/check_content_parser.c | 59 |
2 files changed, 63 insertions, 1 deletions
diff --git a/src/content-parser.c b/src/content-parser.c index aa4db79..f412810 100644 --- a/src/content-parser.c +++ b/src/content-parser.c @@ -548,6 +548,8 @@ blogc_content_parse(const char *src) case CONTENT_UNORDERED_LIST_OR_HORIZONTAL_RULE: if (c == d) { + if (is_last) + goto hr; state = CONTENT_HORIZONTAL_RULE; break; } @@ -558,9 +560,10 @@ blogc_content_parse(const char *src) break; case CONTENT_HORIZONTAL_RULE: - if (c == d) { + if (c == d && !is_last) { break; } +hr: if (c == '\n' || c == '\r' || is_last) { b_string_append(rv, "<hr />\n"); state = CONTENT_START_LINE; diff --git a/tests/check_content_parser.c b/tests/check_content_parser.c index 0053051..390d516 100644 --- a/tests/check_content_parser.c +++ b/tests/check_content_parser.c @@ -216,6 +216,64 @@ test_content_parse_code(void **state) void +test_content_parse_horizontal_rule(void **state) +{ + char *html = blogc_content_parse("bola\nguda\n\n**"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola\n" + "guda</p>\n" + "<hr />\n"); + free(html); + html = blogc_content_parse("bola\nguda\n\n++++"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola\n" + "guda</p>\n" + "<hr />\n"); + free(html); + html = blogc_content_parse("bola\nguda\n\n--\n"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola\n" + "guda</p>\n" + "<hr />\n"); + free(html); + html = blogc_content_parse("bola\nguda\n\n****\n"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola\n" + "guda</p>\n" + "<hr />\n"); + free(html); + html = blogc_content_parse( + "bola\n" + "\n" + "**\n" + "\n" + "chunda\n"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola</p>\n" + "<hr />\n" + "<p>chunda</p>\n"); + free(html); + html = blogc_content_parse( + "bola\n" + "\n" + "----\n" + "\n" + "chunda\n"); + assert_non_null(html); + assert_string_equal(html, + "<p>bola</p>\n" + "<hr />\n" + "<p>chunda</p>\n"); + free(html); +} + + +void test_content_parse_invalid_header(void **state) { char *html = blogc_content_parse( @@ -308,6 +366,7 @@ main(void) unit_test(test_content_parse_html), unit_test(test_content_parse_blockquote), unit_test(test_content_parse_code), + unit_test(test_content_parse_horizontal_rule), unit_test(test_content_parse_invalid_header), unit_test(test_content_parse_invalid_header_empty), unit_test(test_content_parse_invalid_blockquote), |