summaryrefslogtreecommitdiff
path: root/src/inlines.c
diff options
context:
space:
mode:
authorAshe Connor <kivikakk@github.com>2017-11-02 19:58:10 +1100
committerGitHub <noreply@github.com>2017-11-02 19:58:10 +1100
commit1326fd0d8d945b1eb33c5c5d2f536c6fda0201d1 (patch)
tree0177899c8713b2bf13c437c83dabd54032463d6e /src/inlines.c
parent9853666272e87c83050f7e30ae4b3ed9890c8c4f (diff)
parent5da792fc3714f66a88aabb5d13cb0eed674cb6c5 (diff)
Merge branch 'master' into upstream/inline-sourcepos
Diffstat (limited to 'src/inlines.c')
-rw-r--r--src/inlines.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/inlines.c b/src/inlines.c
index 21b11e1..3bade11 100644
--- a/src/inlines.c
+++ b/src/inlines.c
@@ -76,7 +76,7 @@ static delimiter *S_insert_emph(subject *subj, delimiter *opener,
static int parse_inline(subject *subj, cmark_node *parent, int options);
static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e,
- cmark_strbuf *buffer, cmark_reference_map *refmap);
+ cmark_chunk *chunk, cmark_reference_map *refmap);
static bufsize_t subject_find_special_char(subject *subj, int options);
// Create an inline with a literal string value.
@@ -163,12 +163,10 @@ static CMARK_INLINE cmark_node *make_autolink(subject *subj,
}
static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e,
- cmark_strbuf *buffer, cmark_reference_map *refmap) {
+ cmark_chunk *chunk, cmark_reference_map *refmap) {
int i;
e->mem = mem;
- e->input.data = buffer->ptr;
- e->input.len = buffer->size;
- e->input.alloc = 0;
+ e->input = *chunk;
e->line = line_number;
e->pos = 0;
e->block_offset = block_offset;
@@ -404,7 +402,8 @@ static int scan_delims(subject *subj, unsigned char c, bool *can_open,
*can_close = right_flanking &&
(!left_flanking || cmark_utf8proc_is_punctuation(after_char));
} else if (c == '\'' || c == '"') {
- *can_open = left_flanking && !right_flanking;
+ *can_open = left_flanking && !right_flanking &&
+ before_char != ']' && before_char != ')';
*can_close = right_flanking;
} else {
*can_open = left_flanking;
@@ -1248,7 +1247,8 @@ static int parse_inline(subject *subj, cmark_node *parent, int options) {
extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent,
cmark_reference_map *refmap, int options) {
subject subj;
- subject_from_buf(mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &parent->content, refmap);
+ cmark_chunk content = {parent->content.ptr, parent->content.size, 0};
+ subject_from_buf(mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &content, refmap);
cmark_chunk_rtrim(&subj.input);
while (!is_eof(&subj) && parse_inline(&subj, parent, options))
@@ -1276,7 +1276,7 @@ static void spnl(subject *subj) {
// Modify refmap if a reference is encountered.
// Return 0 if no reference found, otherwise position of subject
// after reference is parsed.
-bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_strbuf *input,
+bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,
cmark_reference_map *refmap) {
subject subj;