aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);