Update md4c to 0.4.8

Change-Id: Ib0e1ef259696aa380aba0819aa4e1d8a12b4a21d
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
(cherry picked from commit 1759626cd61fbc765d21ce458cc5d472db087f3e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Kai Köhne 2021-06-07 12:11:30 +02:00 committed by Qt Cherry-pick Bot
parent 5671daa487
commit f9a757ad81
2 changed files with 68 additions and 29 deletions

View File

@ -588,7 +588,7 @@ struct MD_UNICODE_FOLD_INFO_tag {
#define R(cp_min, cp_max) ((cp_min) | 0x40000000), ((cp_max) | 0x80000000)
#define S(cp) (cp)
/* Unicode "Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps" categories.
* (generated by scripts/build_punct_map.py) */
* (generated by scripts/build_folding_map.py) */
static const unsigned FOLD_MAP_1[] = {
R(0x0041,0x005a), S(0x00b5), R(0x00c0,0x00d6), R(0x00d8,0x00de), R(0x0100,0x012e), R(0x0132,0x0136),
R(0x0139,0x0147), R(0x014a,0x0176), S(0x0178), R(0x0179,0x017d), S(0x017f), S(0x0181), S(0x0182),
@ -3611,6 +3611,34 @@ md_resolve_links(MD_CTX* ctx, const MD_LINE* lines, int n_lines)
}
md_analyze_link_contents(ctx, lines, n_lines, opener_index+1, closer_index);
/* If the link text is formed by nothing but permissive autolink,
* suppress the autolink.
* See https://github.com/mity/md4c/issues/152 for more info. */
if(ctx->parser.flags & MD_FLAG_PERMISSIVEAUTOLINKS) {
MD_MARK* first_nested;
MD_MARK* last_nested;
first_nested = opener + 1;
while(first_nested->ch == _T('D') && first_nested < closer)
first_nested++;
last_nested = closer - 1;
while(first_nested->ch == _T('D') && last_nested > opener)
last_nested--;
if((first_nested->flags & MD_MARK_RESOLVED) &&
first_nested->beg == opener->end &&
ISANYOF_(first_nested->ch, _T("@:.")) &&
first_nested->next == (last_nested - ctx->marks) &&
last_nested->end == closer->beg)
{
first_nested->ch = _T('D');
first_nested->flags &= ~MD_MARK_RESOLVED;
last_nested->ch = _T('D');
last_nested->flags &= ~MD_MARK_RESOLVED;
}
}
}
opener_index = next_index;
@ -5525,7 +5553,7 @@ md_push_container(MD_CTX* ctx, const MD_CONTAINER* container)
}
static int
md_enter_child_containers(MD_CTX* ctx, int n_children, unsigned data)
md_enter_child_containers(MD_CTX* ctx, int n_children)
{
int i;
int ret = 0;
@ -5550,7 +5578,7 @@ md_enter_child_containers(MD_CTX* ctx, int n_children, unsigned data)
MD_CHECK(md_push_container_bytes(ctx,
(is_ordered_list ? MD_BLOCK_OL : MD_BLOCK_UL),
c->start, data, MD_BLOCK_CONTAINER_OPENER));
c->start, c->ch, MD_BLOCK_CONTAINER_OPENER));
MD_CHECK(md_push_container_bytes(ctx, MD_BLOCK_LI,
c->task_mark_off,
(c->is_task ? CH(c->task_mark_off) : 0),
@ -5779,25 +5807,30 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
/* Check whether we are HTML block continuation. */
if(pivot_line->type == MD_LINE_HTML && ctx->html_block_type > 0) {
int html_block_type;
html_block_type = md_is_html_block_end_condition(ctx, off, &off);
if(html_block_type > 0) {
MD_ASSERT(html_block_type == ctx->html_block_type);
/* Make sure this is the last line of the block. */
if(n_parents < ctx->n_containers) {
/* HTML block is implicitly ended if the enclosing container
* block ends. */
ctx->html_block_type = 0;
} else {
int html_block_type;
/* Some end conditions serve as blank lines at the same time. */
if(html_block_type == 6 || html_block_type == 7) {
line->type = MD_LINE_BLANK;
line->indent = 0;
break;
html_block_type = md_is_html_block_end_condition(ctx, off, &off);
if(html_block_type > 0) {
MD_ASSERT(html_block_type == ctx->html_block_type);
/* Make sure this is the last line of the block. */
ctx->html_block_type = 0;
/* Some end conditions serve as blank lines at the same time. */
if(html_block_type == 6 || html_block_type == 7) {
line->type = MD_LINE_BLANK;
line->indent = 0;
break;
}
}
}
if(n_parents == ctx->n_containers) {
line->type = MD_LINE_HTML;
n_parents = ctx->n_containers;
break;
}
}
@ -5864,7 +5897,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
/* Check whether we are Setext underline. */
if(line->indent < ctx->code_indent_offset && pivot_line->type == MD_LINE_TEXT
&& (CH(off) == _T('=') || CH(off) == _T('-'))
&& off < ctx->size && ISANYOF2(off, _T('='), _T('-'))
&& (n_parents == ctx->n_containers))
{
unsigned level;
@ -5877,7 +5910,10 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for thematic break line. */
if(line->indent < ctx->code_indent_offset && ISANYOF(off, _T("-_*")) && off >= hr_killer) {
if(line->indent < ctx->code_indent_offset
&& off < ctx->size && off >= hr_killer
&& ISANYOF(off, _T("-_*")))
{
if(md_is_hr_line(ctx, off, &off, &hr_killer)) {
line->type = MD_LINE_HR;
break;
@ -5941,7 +5977,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
{
/* Noop. List mark followed by a blank line cannot interrupt a paragraph. */
} else if(pivot_line->type == MD_LINE_TEXT && n_parents == ctx->n_containers &&
(container.ch == _T('.') || container.ch == _T(')')) && container.start != 1)
ISANYOF2_(container.ch, _T('.'), _T(')')) && container.start != 1)
{
/* Noop. Ordered list cannot interrupt a paragraph unless the start index is 1. */
} else {
@ -5982,7 +6018,9 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for ATX header. */
if(line->indent < ctx->code_indent_offset && CH(off) == _T('#')) {
if(line->indent < ctx->code_indent_offset &&
off < ctx->size && CH(off) == _T('#'))
{
unsigned level;
if(md_is_atxheader_line(ctx, off, &line->beg, &off, &level)) {
@ -5993,7 +6031,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check whether we are starting code fence. */
if(CH(off) == _T('`') || CH(off) == _T('~')) {
if(off < ctx->size && ISANYOF2(off, _T('`'), _T('~'))) {
if(md_is_opening_code_fence(ctx, off, &off)) {
line->type = MD_LINE_FENCEDCODE;
line->data = 1;
@ -6002,7 +6040,8 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for start of raw HTML block. */
if(CH(off) == _T('<') && !(ctx->parser.flags & MD_FLAG_NOHTMLBLOCKS))
if(off < ctx->size && CH(off) == _T('<')
&& !(ctx->parser.flags & MD_FLAG_NOHTMLBLOCKS))
{
ctx->html_block_type = md_is_html_block_start_condition(ctx, off);
@ -6023,9 +6062,9 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
/* Check for table underline. */
if((ctx->parser.flags & MD_FLAG_TABLES) && pivot_line->type == MD_LINE_TEXT &&
(CH(off) == _T('|') || CH(off) == _T('-') || CH(off) == _T(':')) &&
n_parents == ctx->n_containers)
if((ctx->parser.flags & MD_FLAG_TABLES) && pivot_line->type == MD_LINE_TEXT
&& off < ctx->size && ISANYOF3(off, _T('|'), _T('-'), _T(':'))
&& n_parents == ctx->n_containers)
{
unsigned col_count;
@ -6157,7 +6196,7 @@ md_analyze_line(MD_CTX* ctx, OFF beg, OFF* p_end,
}
if(n_children > 0)
MD_CHECK(md_enter_child_containers(ctx, n_children, line->data));
MD_CHECK(md_enter_child_containers(ctx, n_children));
abort:
return ret;

View File

@ -9,7 +9,7 @@
"License": "MIT License",
"LicenseId": "MIT",
"LicenseFile": "LICENSE.md",
"Version": "0.4.7",
"DownloadLocation": "https://github.com/mity/md4c/releases/tag/release-0.4.7",
"Version": "0.4.8",
"DownloadLocation": "https://github.com/mity/md4c/releases/tag/release-0.4.8",
"Copyright": "Copyright © 2016-2020 Martin Mitáš"
}