Skip to content

Commit

Permalink
updated to cmark 0.24.1
Browse files Browse the repository at this point in the history
  • Loading branch information
rhinoman committed Jan 18, 2016
1 parent bbc056c commit 59d78f2
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 19 deletions.
4 changes: 2 additions & 2 deletions cmark_version.h
@@ -1,7 +1,7 @@
#ifndef CMARK_VERSION_H
#define CMARK_VERSION_H

#define CMARK_VERSION ((0 << 16) | (24 << 8) | 0)
#define CMARK_VERSION_STRING "0.24.0"
#define CMARK_VERSION ((0 << 16) | (24 << 8) | 1)
#define CMARK_VERSION_STRING "0.24.1"

#endif
35 changes: 22 additions & 13 deletions commonmark.c
Expand Up @@ -24,16 +24,21 @@ static inline void outc(cmark_renderer *renderer, cmark_escaping escape,
int32_t c, unsigned char nextc) {
bool needs_escaping = false;
char encoded[20];
bool follows_digit = renderer->buffer->size > 0 &&
cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]);

needs_escaping =
escape != LITERAL &&
((escape == NORMAL &&
(c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' ||
c == '>' || c == '\\' || c == '`' || c == '!' ||
(c == '&' && isalpha(nextc)) || (c == '!' && nextc == '[') ||
(renderer->begin_content && (c == '-' || c == '+' || c == '=')) ||
((c == '.' || c == ')') &&
isdigit(renderer->buffer->ptr[renderer->buffer->size - 1])))) ||
(renderer->begin_content && (c == '-' || c == '+' || c == '=') &&
// begin_content doesn't get set to false til we've passed digits
// at the beginning of line, so...
!follows_digit) ||
(renderer->begin_content && (c == '.' || c == ')') && follows_digit &&
(nextc == 0 || cmark_isspace(nextc))))) ||
(escape == URL && (c == '`' || c == '<' || c == '>' || isspace(c) ||
c == '\\' || c == ')' || c == '(')) ||
(escape == TITLE &&
Expand Down Expand Up @@ -121,6 +126,9 @@ static bool is_autolink(cmark_node *node) {
}

link_text = node->first_child;
if (link_text == NULL) {
return false;
}
cmark_consolidate_text_nodes(link_text);
realurl = (char *)url->data;
realurllen = url->len;
Expand Down Expand Up @@ -193,15 +201,17 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
case CMARK_NODE_LIST:
if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK ||
node->next->type == CMARK_NODE_LIST)) {
// this ensures 2 blank lines after list,
// if before code block or list:
LIT("\n");
// this ensures that a following code block or list will be
// inteprereted correctly.
CR();
LIT("<!-- end list -->");
BLANKLINE();
}
break;

case CMARK_NODE_ITEM:
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
marker_width = 2;
marker_width = 4;
} else {
list_number = cmark_node_get_list_start(node->parent);
list_delim = cmark_node_get_list_delim(node->parent);
Expand All @@ -220,15 +230,14 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,
}
if (entering) {
if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
LIT("* ");
LIT(" - ");
renderer->begin_content = true;
cmark_strbuf_puts(renderer->prefix, " ");
} else {
LIT(listmarker);
renderer->begin_content = true;
for (i = marker_width; i--;) {
cmark_strbuf_putc(renderer->prefix, ' ');
}
}
for (i = marker_width; i--;) {
cmark_strbuf_putc(renderer->prefix, ' ');
}
} else {
cmark_strbuf_truncate(renderer->prefix,
Expand Down Expand Up @@ -320,7 +329,7 @@ static int S_render_node(cmark_renderer *renderer, cmark_node *node,

case CMARK_NODE_LINEBREAK:
if (!(CMARK_OPT_HARDBREAKS & options)) {
LIT("\\");
LIT(" ");
}
CR();
break;
Expand Down
3 changes: 3 additions & 0 deletions iterator.c
Expand Up @@ -89,6 +89,9 @@ cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) {
cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; }

void cmark_consolidate_text_nodes(cmark_node *root) {
if (root == NULL) {
return;
}
cmark_iter *iter = cmark_iter_new(root);
cmark_strbuf buf = GH_BUF_INIT;
cmark_event_type ev_type;
Expand Down
20 changes: 16 additions & 4 deletions render.c
Expand Up @@ -23,6 +23,7 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
unsigned char nextc;
int32_t c;
int i = 0;
int last_nonspace;
int len;
cmark_chunk remainder = cmark_chunk_literal("");
int k = renderer->buffer->size - 1;
Expand Down Expand Up @@ -63,15 +64,20 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
nextc = source[i + len];
if (c == 32 && wrap) {
if (!renderer->begin_line) {
last_nonspace = renderer->buffer->size;
cmark_strbuf_putc(renderer->buffer, ' ');
renderer->column += 1;
renderer->begin_line = false;
renderer->begin_content = false;
renderer->last_breakable = renderer->buffer->size - 1;
// skip following spaces
while (source[i + 1] == ' ') {
i++;
}
// We don't allow breaks that make a digit the first character
// because this causes problems with commonmark output.
if (!cmark_isdigit(source[i + 1])) {
renderer->last_breakable = last_nonspace;
}
}

} else if (c == 10) {
Expand All @@ -83,11 +89,17 @@ static void S_out(cmark_renderer *renderer, const char *source, bool wrap,
} else if (escape == LITERAL) {
cmark_render_code_point(renderer, c);
renderer->begin_line = false;
renderer->begin_content = false;
// we don't set 'begin_content' to false til we've
// finished parsing a digit. Reason: in commonmark
// we need to escape a potential list marker after
// a digit:
renderer->begin_content = renderer->begin_content &&
cmark_isdigit(c) == 1;
} else {
(renderer->outc)(renderer, escape, c, nextc);
renderer->begin_line = false;
renderer->begin_content = false;
renderer->begin_content = renderer->begin_content &&
cmark_isdigit(c) == 1;
}

// If adding the character went beyond width, look for an
Expand Down Expand Up @@ -142,7 +154,7 @@ char *cmark_render(cmark_node *root, int options, int width,
cmark_iter *iter = cmark_iter_new(root);

cmark_renderer renderer = {&buf, &pref, 0, width, 0, 0, true,
false, false, false,
true, false, false,
outc, S_cr, S_blankline, S_out};

while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
Expand Down

0 comments on commit 59d78f2

Please sign in to comment.