diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-12-21 09:53:39 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-12-21 09:53:39 -0800 |
commit | 1880e6535e335f143f9547494def01c13f2f331b (patch) | |
tree | 2d16ce7260f99d7a3ef89781c38fba089bf30dad | |
parent | 77f7e7ae8b8f6c42c12e658c7a129429c1ba7bee (diff) |
Commonmark renderer: always use fences for code (#317).
This solves problems with adjacent code blocks being
merged.
-rw-r--r-- | src/commonmark.c | 54 |
1 files changed, 17 insertions, 37 deletions
diff --git a/src/commonmark.c b/src/commonmark.c index f00d243..7438920 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -215,8 +215,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_LIST: - if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK || - node->next->type == CMARK_NODE_LIST)) { + if (!entering && node->next && (node->next->type == CMARK_NODE_LIST)) { // this ensures that a following indented code block or list will be // inteprereted correctly. CR(); @@ -277,14 +276,6 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, break; case CMARK_NODE_CODE_BLOCK: - if (entering && node->prev && - (node->prev->type == CMARK_NODE_CODE_BLOCK)) { - // this ensures that consecutive indented code blocks will not - // be merged (#317) - CR(); - LIT("<!-- end code block -->"); - BLANKLINE(); - } first_in_list_item = node->prev == NULL && node->parent && node->parent->type == CMARK_NODE_ITEM; @@ -297,34 +288,23 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node, fencechar[0] = strchr(info, '`') == NULL ? '`' : '~'; code = cmark_node_get_literal(node); code_len = strlen(code); - // use indented form if no info, and code doesn't - // begin or end with a blank line, and code isn't - // first thing in a list item - if (info_len == 0 && (code_len > 2 && !cmark_isspace(code[0]) && - !(cmark_isspace(code[code_len - 1]) && - cmark_isspace(code[code_len - 2]))) && - !first_in_list_item) { - LIT(" "); - cmark_strbuf_puts(renderer->prefix, " "); - OUT(cmark_node_get_literal(node), false, LITERAL); - cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4); - } else { - numticks = longest_backtick_sequence(code) + 1; - if (numticks < 3) { - numticks = 3; - } - for (i = 0; i < numticks; i++) { - LIT(fencechar); - } - LIT(" "); - OUT(info, false, LITERAL); - CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); - CR(); - for (i = 0; i < numticks; i++) { - LIT(fencechar); - } + + numticks = longest_backtick_sequence(code) + 1; + if (numticks < 3) { + numticks = 3; + } + for (i = 0; i < numticks; i++) { + LIT(fencechar); } + LIT(" "); + OUT(info, false, LITERAL); + CR(); + OUT(cmark_node_get_literal(node), false, LITERAL); + CR(); + for (i = 0; i < numticks; i++) { + LIT(fencechar); + } + BLANKLINE(); break; |