aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2015-07-04 19:56:05 -0300
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2015-07-04 19:56:05 -0300
commit6cef5617423400fdfdbbeb9e2b0d2de8b6c2253d (patch)
tree2f15d8f7c70e1a8ee20c8cd7a93d712dc03d565d
parent8c761376ab6921b74364f89e99eeb9a810abb3ce (diff)
downloadblogc-6cef5617423400fdfdbbeb9e2b0d2de8b6c2253d.tar.gz
blogc-6cef5617423400fdfdbbeb9e2b0d2de8b6c2253d.tar.bz2
blogc-6cef5617423400fdfdbbeb9e2b0d2de8b6c2253d.zip
content-parser: fixed bug when using inline delim in link title
-rw-r--r--src/content-parser.c14
-rw-r--r--tests/check_content_parser.c8
2 files changed, 15 insertions, 7 deletions
diff --git a/src/content-parser.c b/src/content-parser.c
index fa17ab8..8821a17 100644
--- a/src/content-parser.c
+++ b/src/content-parser.c
@@ -109,7 +109,7 @@ blogc_content_parse_inline(const char *src)
switch (c) {
case '\\':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
@@ -119,7 +119,7 @@ blogc_content_parse_inline(const char *src)
case '*':
case '_':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
@@ -176,7 +176,7 @@ blogc_content_parse_inline(const char *src)
break;
case '!':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
@@ -188,7 +188,7 @@ blogc_content_parse_inline(const char *src)
break;
case '[':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
@@ -212,7 +212,7 @@ blogc_content_parse_inline(const char *src)
break;
case ']':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
@@ -246,7 +246,7 @@ blogc_content_parse_inline(const char *src)
break;
case '(':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
@@ -260,7 +260,7 @@ blogc_content_parse_inline(const char *src)
break;
case ')':
- if (open_code || open_code_double) {
+ if (state == LINK_CLOSED && (open_code || open_code_double)) {
b_string_append_c(rv, c);
break;
}
diff --git a/tests/check_content_parser.c b/tests/check_content_parser.c
index 365b309..cb497cb 100644
--- a/tests/check_content_parser.c
+++ b/tests/check_content_parser.c
@@ -862,6 +862,14 @@ test_content_parse_inline_link(void **state)
assert_non_null(html);
assert_string_equal(html, "<a href=\"http://example.org/\">bo\nla</a>\n");
free(html);
+ html = blogc_content_parse_inline("[``bola``](http://example.org/)\n");
+ assert_non_null(html);
+ assert_string_equal(html, "<a href=\"http://example.org/\"><code>bola</code></a>\n");
+ free(html);
+ html = blogc_content_parse_inline("[``bola(2)[3]**!\\``](http://example.org/)\n");
+ assert_non_null(html);
+ assert_string_equal(html, "<a href=\"http://example.org/\"><code>bola(2)[3]**!\\</code></a>\n");
+ free(html);
// "invalid"
html = blogc_content_parse_inline("[bola](\nhttp://example.org/)\n");
assert_non_null(html);