diff options
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | api_test/main.c | 32 | ||||
-rw-r--r-- | src/blocks.c | 67 | ||||
-rw-r--r-- | src/chunk.h | 7 | ||||
-rw-r--r-- | src/scanners.c | 2041 | ||||
-rw-r--r-- | src/scanners.re | 8 | ||||
-rw-r--r-- | test/spec.txt | 266 |
8 files changed, 1201 insertions, 1228 deletions
@@ -131,14 +131,12 @@ $(ALLTESTS): $(SPEC) python3 test/spec_tests.py --spec $< --dump-tests | python3 -c 'import json; import sys; tests = json.loads(sys.stdin.read()); print("\n".join([test["markdown"] for test in tests]))' > $@ leakcheck: $(ALLTESTS) - rc=0; \ for format in html man xml latex commonmark; do \ for opts in "" "--smart" "--normalize"; do \ echo "cmark -t $$format $$opts" ; \ - cat $< | valgrind -q --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t $$format $$opts >/dev/null || rc=1; \ + valgrind -q --leak-check=full --dsymutil=yes --error-exitcode=1 $(PROG) -t $$format $$opts $(ALLTESTS) >/dev/null || exit 1;\ done; \ - done; \ - exit $$rc + done; fuzztest: { for i in `seq 1 10`; do \ @@ -65,7 +65,7 @@ Installing Building the C program (`cmark`) and shared library (`libcmark`) requires [cmake]. If you modify `scanners.re`, then you will also -need [re2c] (>= 0.14.2), which is used to generate `scanners.c` from +need [re2c] \(>= 0.14.2\), which is used to generate `scanners.c` from `scanners.re`. We have included a pre-generated `scanners.c` in the repository to reduce build dependencies. diff --git a/api_test/main.c b/api_test/main.c index 8da9ba9..d493e00 100644 --- a/api_test/main.c +++ b/api_test/main.c @@ -83,12 +83,10 @@ static void accessors(test_batch_runner *runner) { "\n" "3. Item 2\n" "\n" - "\n" - " code\n" - "\n" "``` lang\n" "fenced\n" "```\n" + " code\n" "\n" "<div>html</div>\n" "\n" @@ -117,23 +115,23 @@ static void accessors(test_batch_runner *runner) { INT_EQ(runner, cmark_node_get_list_tight(ordered_list), 0, "get_list_tight loose"); - cmark_node *code = cmark_node_next(ordered_list); - STR_EQ(runner, cmark_node_get_literal(code), "code\n", - "get_literal indented code"); - - cmark_node *fenced = cmark_node_next(code); + cmark_node *fenced = cmark_node_next(ordered_list); STR_EQ(runner, cmark_node_get_literal(fenced), "fenced\n", "get_literal fenced code"); STR_EQ(runner, cmark_node_get_fence_info(fenced), "lang", "get_fence_info"); - cmark_node *html = cmark_node_next(fenced); + cmark_node *code = cmark_node_next(fenced); + STR_EQ(runner, cmark_node_get_literal(code), "code\n", + "get_literal indented code"); + + cmark_node *html = cmark_node_next(code); STR_EQ(runner, cmark_node_get_literal(html), "<div>html</div>\n", "get_literal html"); cmark_node *paragraph = cmark_node_next(html); - INT_EQ(runner, cmark_node_get_start_line(paragraph), 19, "get_start_line"); + INT_EQ(runner, cmark_node_get_start_line(paragraph), 17, "get_start_line"); INT_EQ(runner, cmark_node_get_start_column(paragraph), 1, "get_start_column"); - INT_EQ(runner, cmark_node_get_end_line(paragraph), 19, "get_end_line"); + INT_EQ(runner, cmark_node_get_end_line(paragraph), 17, "get_end_line"); cmark_node *link = cmark_node_first_child(paragraph); STR_EQ(runner, cmark_node_get_url(link), "url", "get_url"); @@ -171,7 +169,13 @@ static void accessors(test_batch_runner *runner) { OK(runner, cmark_node_set_url(link, "URL"), "set_url"); OK(runner, cmark_node_set_title(link, "TITLE"), "set_title"); - OK(runner, cmark_node_set_literal(string, "LINK"), "set_literal string"); + OK(runner, cmark_node_set_literal(string, "prefix-LINK"), + "set_literal string"); + + // Set literal to suffix of itself (issue #139). + const char *literal = cmark_node_get_literal(string); + OK(runner, cmark_node_set_literal(string, literal + sizeof("prefix")), + "set_literal suffix"); char *rendered_html = cmark_render_html(doc, CMARK_OPT_DEFAULT); static const char expected_html[] = @@ -188,10 +192,10 @@ static void accessors(test_batch_runner *runner) { "<li>Item 1</li>\n" "<li>Item 2</li>\n" "</ul>\n" - "<pre><code>CODE\n" - "</code></pre>\n" "<pre><code class=\"language-LANG\">FENCED\n" "</code></pre>\n" + "<pre><code>CODE\n" + "</code></pre>\n" "<div>HTML</div>\n" "<p><a href=\"URL\" title=\"TITLE\">LINK</a></p>\n"; STR_EQ(runner, rendered_html, expected_html, "setters work"); diff --git a/src/blocks.c b/src/blocks.c index b21f800..5c04fc0 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -222,24 +222,6 @@ static bool ends_with_blank_line(cmark_node *node) { return false; } -// Break out of all containing lists -static int break_out_of_lists(cmark_parser *parser, cmark_node **bptr) { - cmark_node *container = *bptr; - cmark_node *b = parser->root; - // find first containing NODE_LIST: - while (b && S_type(b) != CMARK_NODE_LIST) { - b = b->last_child; - } - if (b) { - while (container && container != b) { - container = finalize(parser, container); - } - finalize(parser, b); - *bptr = b->parent; - } - return 0; -} - static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { bufsize_t pos; cmark_node *item; @@ -401,10 +383,12 @@ static void process_inlines(cmark_mem *mem, cmark_node *root, // On success, returns length of the marker, and populates // data with the details. On failure, returns 0. static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, - bufsize_t pos, cmark_list **dataptr) { + bufsize_t pos, bool interrupts_paragraph, + cmark_list **dataptr) { unsigned char c; bufsize_t startpos; cmark_list *data; + bufsize_t i; startpos = pos; c = peek_at(input, pos); @@ -414,6 +398,18 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, if (!cmark_isspace(peek_at(input, pos))) { return 0; } + + if (interrupts_paragraph) { + i = pos; + // require non-blank content after list marker: + while (S_is_space_or_tab(peek_at(input, i))) { + i++; + } + if (peek_at(input, i) == '\n') { + return 0; + } + } + data = (cmark_list *)mem->calloc(1, sizeof(*data)); data->marker_offset = 0; // will be adjusted later data->list_type = CMARK_BULLET_LIST; @@ -434,12 +430,26 @@ static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, // This also seems to be the limit for 'start' in some browsers. } while (digits < 9 && cmark_isdigit(peek_at(input, pos))); + if (interrupts_paragraph && start != 1) { + return 0; + } c = peek_at(input, pos); if (c == '.' || c == ')') { pos++; if (!cmark_isspace(peek_at(input, pos))) { return 0; } + if (interrupts_paragraph) { + // require non-blank content after list marker: + i = pos; + while (S_is_space_or_tab(peek_at(input, i))) { + i++; + } + if (S_is_line_end_char(peek_at(input, i))) { + return 0; + } + } + data = (cmark_list *)mem->calloc(1, sizeof(*data)); data->marker_offset = 0; // will be adjusted later data->list_type = CMARK_ORDERED_LIST; @@ -852,6 +862,8 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, if (!indented && peek_at(input, parser->first_nonspace) == '>') { + bufsize_t blockquote_startpos = parser->first_nonspace; + S_advance_offset(parser, input, parser->first_nonspace + 1 - parser->offset, false); // optional following character @@ -859,18 +871,19 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, S_advance_offset(parser, input, 1, true); } *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, - parser->offset + 1); + blockquote_startpos + 1); } else if (!indented && (matched = scan_atx_heading_start( input, parser->first_nonspace))) { bufsize_t hashpos; int level = 0; + bufsize_t heading_startpos = parser->first_nonspace; S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); *container = - add_child(parser, *container, CMARK_NODE_HEADING, parser->offset + 1); + add_child(parser, *container, CMARK_NODE_HEADING, heading_startpos + 1); hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); @@ -921,8 +934,12 @@ static void open_new_blocks(cmark_parser *parser, cmark_node **container, parser->first_nonspace + 1); S_advance_offset(parser, input, input->len - 1 - parser->offset, false); } else if ((matched = parse_list_marker(parser->mem, input, - parser->first_nonspace, &data)) && - (!indented || cont_type == CMARK_NODE_LIST)) { + parser->first_nonspace, + (*container)->type == + CMARK_NODE_PARAGRAPH, + &data)) && + (!indented || cont_type == CMARK_NODE_LIST)) { + // Note that we can have new list items starting with >= 4 // spaces indent, as long as the list container is still open. int i = 0; @@ -1146,10 +1163,6 @@ static void S_process_line(cmark_parser *parser, const unsigned char *buffer, container = last_matched_container; - // check to see if we've hit 2nd blank line, break out of list: - if (parser->blank && S_last_line_blank(container)) - break_out_of_lists(parser, &container); - open_new_blocks(parser, &container, &input, all_matched); add_text_to_container(parser, container, last_matched_container, &input); diff --git a/src/chunk.h b/src/chunk.h index 1bea422..a2248f5 100644 --- a/src/chunk.h +++ b/src/chunk.h @@ -77,9 +77,7 @@ static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, const char *str) { - if (c->alloc) { - mem->free(c->data); - } + unsigned char *old = c->alloc ? c->data : NULL; if (str == NULL) { c->len = 0; c->data = NULL; @@ -90,6 +88,9 @@ static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, c->alloc = 1; memcpy(c->data, str, c->len + 1); } + if (old != NULL) { + mem->free(old); + } } static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { diff --git a/src/scanners.c b/src/scanners.c index 25a122f..709a74e 100644 --- a/src/scanners.c +++ b/src/scanners.c @@ -18252,18 +18252,18 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *(marker = p); if (yych <= 0xDF) { @@ -18301,7 +18301,9 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { goto yy1170; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1157; + if (yych <= '\n') goto yy1168; goto yy1157; } else { @@ -18381,7 +18383,9 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { goto yy1170; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1161; + if (yych <= '\n') goto yy1168; goto yy1161; } else { @@ -18395,7 +18399,9 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { goto yy1170; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1161; + if (yych <= '\n') goto yy1168; goto yy1161; } else { @@ -18409,7 +18415,9 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { goto yy1170; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1161; + if (yych <= '\n') goto yy1168; goto yy1161; } else { @@ -18423,7 +18431,9 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { goto yy1170; } if (yych <= '\f') { - if (yych == '\n') + if (yych <= 0x08) + goto yy1161; + if (yych <= '\n') goto yy1168; goto yy1161; } else { @@ -18436,7 +18446,9 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) { if (yybm[0 + (yych = *p)] & 128) { goto yy1170; } - if (yych == '\n') + if (yych <= 0x08) + goto yy1161; + if (yych <= '\n') goto yy1168; if (yych == '\r') goto yy1168; @@ -18664,18 +18676,19 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { { unsigned char yych; static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, - 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 128, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; yych = *(marker = p); if (yych <= 0x7F) { @@ -18724,21 +18737,33 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1205 : { return 0; } yy1206: yych = *(marker = ++p); - if (yych == ' ') - goto yy1242; - if (yych == '*') - goto yy1244; - goto yy1205; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1238; + goto yy1205; + } else { + if (yych <= ' ') + goto yy1238; + if (yych == '*') + goto yy1240; + goto yy1205; + } yy1207: yych = *(marker = ++p); - if (yych == ' ') - goto yy1230; - if (yych == '_') - goto yy1232; - goto yy1205; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1228; + goto yy1205; + } else { + if (yych <= ' ') + goto yy1228; + if (yych == '_') + goto yy1230; + goto yy1205; + } yy1208: yych = *(marker = ++p); - if (yybm[0 + yych] & 8) { + if (yybm[0 + yych] & 16) { goto yy1218; } if (yych == '-') @@ -18801,7 +18826,7 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1218: ++p; yych = *p; - if (yybm[0 + yych] & 8) { + if (yybm[0 + yych] & 16) { goto yy1218; } if (yych != '-') @@ -18809,10 +18834,16 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { yy1220: ++p; yych = *p; - if (yych == ' ') - goto yy1220; - if (yych != '-') + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1220; goto yy1211; + } else { + if (yych <= ' ') + goto yy1220; + if (yych != '-') + goto yy1211; + } yy1222: ++p; yych = *p; @@ -18820,12 +18851,12 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { if (yych <= '\t') { if (yych <= 0x08) goto yy1211; + goto yy1222; } else { if (yych <= '\n') - goto yy1226; + goto yy1224; if (yych <= '\f') goto yy1211; - goto yy1226; } } else { if (yych <= ' ') { @@ -18834,194 +18865,160 @@ bufsize_t _scan_thematic_break(const unsigned char *p) { goto yy1222; } else { if (yych == '-') - goto yy1228; + goto yy1226; goto yy1211; } } yy1224: ++p; + { return (bufsize_t)(p - start); } + yy1226: + ++p; yych = *p; - if (yybm[0 + yych] & 16) { - goto yy1224; + if (yybm[0 + yych] & 32) { + goto yy1226; } if (yych <= 0x08) goto yy1211; if (yych <= '\n') - goto yy1226; - if (yych != '\r') - goto yy1211; - yy1226: - ++p; - { return (bufsize_t)(p - start); } + goto yy1224; + if (yych == '\r') + goto yy1224; + goto yy1211; yy1228: ++p; yych = *p; - if (yybm[0 + yych] & 32) { - goto yy1228; - } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1211; - if (yych <= '\t') - goto yy1224; - goto yy1226; - } else { - if (yych == '\r') - goto yy1226; + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1228; goto yy1211; + } else { + if (yych <= ' ') + goto yy1228; + if (yych != '_') + goto yy1211; } yy1230: ++p; yych = *p; - if (yych == ' ') - goto yy1230; - if (yych != '_') + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1230; goto yy1211; + } else { + if (yych <= ' ') + goto yy1230; + if (yych != '_') + goto yy1211; + } yy1232: ++p; yych = *p; - if (yych == ' ') - goto yy1232; - if (yych != '_') - goto yy1211; - yy1234: - ++p; - yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) goto yy1211; + goto yy1232; } else { if (yych <= '\n') - goto yy1238; + goto yy1234; if (yych <= '\f') goto yy1211; - goto yy1238; } } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy1211; - goto yy1234; + goto yy1232; } else { if (yych == '_') - goto yy1240; + goto yy1236; goto yy1211; } } - yy1236: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych <= 0x08) - goto yy1211; - if (yych <= '\t') - goto yy1236; - if (yych >= '\v') - goto yy1211; - } else { - if (yych <= '\r') - goto yy1238; - if (yych == ' ') - goto yy1236; - goto yy1211; - } - yy1238: + yy1234: ++p; { return (bufsize_t)(p - start); } - yy1240: + yy1236: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1240; + goto yy1236; } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1211; - if (yych <= '\t') - goto yy1236; - goto yy1238; - } else { - if (yych == '\r') - goto yy1238; + if (yych <= 0x08) goto yy1211; - } - yy1242: + if (yych <= '\n') + goto yy1234; + if (yych == '\r') + goto yy1234; + goto yy1211; + yy1238: ++p; yych = *p; - if (yych == ' ') - goto yy1242; - if (yych != '*') + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1238; goto yy1211; - yy1244: + } else { + if (yych <= ' ') + goto yy1238; + if (yych != '*') + goto yy1211; + } + yy1240: ++p; yych = *p; - if (yych == ' ') - goto yy1244; - if (yych != '*') + if (yych <= 0x1F) { + if (yych == '\t') + goto yy1240; goto yy1211; - yy1246: + } else { + if (yych <= ' ') + goto yy1240; + if (yych != '*') + goto yy1211; + } + yy1242: ++p; yych = *p; if (yych <= '\r') { if (yych <= '\t') { if (yych <= 0x08) goto yy1211; + goto yy1242; } else { if (yych <= '\n') - goto yy1250; + goto yy1244; if (yych <= '\f') goto yy1211; - goto yy1250; } } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy1211; - goto yy1246; + goto yy1242; } else { if (yych == '*') - goto yy1252; + goto yy1246; goto yy1211; } } - yy1248: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych <= 0x08) - goto yy1211; - if (yych <= '\t') - goto yy1248; - if (yych >= '\v') - goto yy1211; - } else { - if (yych <= '\r') - goto yy1250; - if (yych == ' ') - goto yy1248; - goto yy1211; - } - yy1250: + yy1244: ++p; { return (bufsize_t)(p - start); } - yy1252: + yy1246: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1252; + goto yy1246; } - if (yych <= '\n') { - if (yych <= 0x08) - goto yy1211; - if (yych <= '\t') - goto yy1248; - goto yy1250; - } else { - if (yych == '\r') - goto yy1250; + if (yych <= 0x08) goto yy1211; - } + if (yych <= '\n') + goto yy1244; + if (yych == '\r') + goto yy1244; + goto yy1211; } } @@ -19057,374 +19054,374 @@ bufsize_t _scan_open_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1256; + goto yy1250; if (yych <= '_') - goto yy1259; - goto yy1257; + goto yy1253; + goto yy1251; } else { if (yych == '~') - goto yy1258; + goto yy1252; if (yych <= 0x7F) - goto yy1259; + goto yy1253; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1260; + goto yy1254; if (yych <= 0xE0) - goto yy1262; + goto yy1256; if (yych <= 0xEC) - goto yy1263; - goto yy1267; + goto yy1257; + goto yy1261; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1263; - goto yy1264; + goto yy1257; + goto yy1258; } else { if (yych <= 0xF3) - goto yy1265; + goto yy1259; if (yych <= 0xF4) - goto yy1266; + goto yy1260; } } } - yy1256 : { return 0; } - yy1257: + yy1250 : { return 0; } + yy1251: yych = *(marker = ++p); if (yych == '`') - goto yy1282; - goto yy1256; - yy1258: + goto yy1276; + goto yy1250; + yy1252: yych = *(marker = ++p); if (yych == '~') - goto yy1268; - goto yy1256; - yy1259: + goto yy1262; + goto yy1250; + yy1253: yych = *++p; - goto yy1256; - yy1260: + goto yy1250; + yy1254: yych = *++p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1259; - yy1261: + goto yy1253; + yy1255: p = marker; - goto yy1256; - yy1262: + goto yy1250; + yy1256: yych = *++p; if (yych <= 0x9F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1260; - goto yy1261; - yy1263: + goto yy1254; + goto yy1255; + yy1257: yych = *++p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1260; - goto yy1261; - yy1264: + goto yy1254; + goto yy1255; + yy1258: yych = *++p; if (yych <= 0x8F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1263; - goto yy1261; - yy1265: + goto yy1257; + goto yy1255; + yy1259: yych = *++p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1263; - goto yy1261; - yy1266: + goto yy1257; + goto yy1255; + yy1260: yych = *++p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0x8F) - goto yy1263; - goto yy1261; - yy1267: + goto yy1257; + goto yy1255; + yy1261: yych = *++p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0x9F) - goto yy1260; - goto yy1261; - yy1268: + goto yy1254; + goto yy1255; + yy1262: yych = *++p; if (yybm[0 + yych] & 16) { - goto yy1269; + goto yy1263; } - goto yy1261; - yy1269: + goto yy1255; + yy1263: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 32) { - goto yy1271; + goto yy1265; } if (yych <= 0xE0) { if (yych <= '~') { if (yych <= 0x00) - goto yy1261; + goto yy1255; if (yych <= '\r') - goto yy1280; - goto yy1269; + goto yy1274; + goto yy1263; } else { if (yych <= 0xC1) - goto yy1261; + goto yy1255; if (yych <= 0xDF) - goto yy1273; - goto yy1274; + goto yy1267; + goto yy1268; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1279; - goto yy1275; + goto yy1273; + goto yy1269; } else { if (yych <= 0xF0) - goto yy1276; + goto yy1270; if (yych <= 0xF3) - goto yy1277; + goto yy1271; if (yych <= 0xF4) - goto yy1278; - goto yy1261; + goto yy1272; + goto yy1255; } } - yy1271: + yy1265: ++p; yych = *p; if (yybm[0 + yych] & 32) { - goto yy1271; + goto yy1265; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1261; + goto yy1255; if (yych <= '\r') - goto yy1280; - goto yy1261; + goto yy1274; + goto yy1255; } else { if (yych <= 0xDF) - goto yy1273; + goto yy1267; if (yych <= 0xE0) - goto yy1274; - goto yy1275; + goto yy1268; + goto yy1269; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1279; + goto yy1273; if (yych <= 0xEF) - goto yy1275; - goto yy1276; + goto yy1269; + goto yy1270; } else { if (yych <= 0xF3) - goto yy1277; + goto yy1271; if (yych <= 0xF4) - goto yy1278; - goto yy1261; + goto yy1272; + goto yy1255; } } - yy1273: + yy1267: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1271; - goto yy1261; - yy1274: + goto yy1265; + goto yy1255; + yy1268: ++p; yych = *p; if (yych <= 0x9F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1273; - goto yy1261; - yy1275: + goto yy1267; + goto yy1255; + yy1269: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1273; - goto yy1261; - yy1276: + goto yy1267; + goto yy1255; + yy1270: ++p; yych = *p; if (yych <= 0x8F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1275; - goto yy1261; - yy1277: + goto yy1269; + goto yy1255; + yy1271: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1275; - goto yy1261; - yy1278: + goto yy1269; + goto yy1255; + yy1272: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0x8F) - goto yy1275; - goto yy1261; - yy1279: + goto yy1269; + goto yy1255; + yy1273: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0x9F) - goto yy1273; - goto yy1261; - yy1280: + goto yy1267; + goto yy1255; + yy1274: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1282: + yy1276: yych = *++p; if (yybm[0 + yych] & 64) { - goto yy1283; + goto yy1277; } - goto yy1261; - yy1283: + goto yy1255; + yy1277: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy1285; + goto yy1279; } if (yych <= 0xE0) { if (yych <= '`') { if (yych <= 0x00) - goto yy1261; + goto yy1255; if (yych <= '\r') - goto yy1294; - goto yy1283; + goto yy1288; + goto yy1277; } else { if (yych <= 0xC1) - goto yy1261; + goto yy1255; if (yych <= 0xDF) - goto yy1287; - goto yy1288; + goto yy1281; + goto yy1282; } } else { if (yych <= 0xEF) { if (yych == 0xED) - goto yy1293; - goto yy1289; + goto yy1287; + goto yy1283; } else { if (yych <= 0xF0) - goto yy1290; + goto yy1284; if (yych <= 0xF3) - goto yy1291; + goto yy1285; if (yych <= 0xF4) - goto yy1292; - goto yy1261; + goto yy1286; + goto yy1255; } } - yy1285: + yy1279: ++p; yych = *p; if (yybm[0 + yych] & 128) { - goto yy1285; + goto yy1279; } if (yych <= 0xEC) { if (yych <= 0xC1) { if (yych <= 0x00) - goto yy1261; + goto yy1255; if (yych <= '\r') - goto yy1294; - goto yy1261; + goto yy1288; + goto yy1255; } else { if (yych <= 0xDF) - goto yy1287; + goto yy1281; if (yych <= 0xE0) - goto yy1288; - goto yy1289; + goto yy1282; + goto yy1283; } } else { if (yych <= 0xF0) { if (yych <= 0xED) - goto yy1293; + goto yy1287; if (yych <= 0xEF) - goto yy1289; - goto yy1290; + goto yy1283; + goto yy1284; } else { if (yych <= 0xF3) - goto yy1291; + goto yy1285; if (yych <= 0xF4) - goto yy1292; - goto yy1261; + goto yy1286; + goto yy1255; } } - yy1287: + yy1281: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1285; - goto yy1261; - yy1288: + goto yy1279; + goto yy1255; + yy1282: ++p; yych = *p; if (yych <= 0x9F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1287; - goto yy1261; - yy1289: + goto yy1281; + goto yy1255; + yy1283: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1287; - goto yy1261; - yy1290: + goto yy1281; + goto yy1255; + yy1284: ++p; yych = *p; if (yych <= 0x8F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1289; - goto yy1261; - yy1291: + goto yy1283; + goto yy1255; + yy1285: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0xBF) - goto yy1289; - goto yy1261; - yy1292: + goto yy1283; + goto yy1255; + yy1286: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0x8F) - goto yy1289; - goto yy1261; - yy1293: + goto yy1283; + goto yy1255; + yy1287: ++p; yych = *p; if (yych <= 0x7F) - goto yy1261; + goto yy1255; if (yych <= 0x9F) - goto yy1287; - goto yy1261; - yy1294: + goto yy1281; + goto yy1255; + yy1288: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19456,190 +19453,190 @@ bufsize_t _scan_close_code_fence(const unsigned char *p) { if (yych <= 0xC1) { if (yych <= '`') { if (yych == '\n') - goto yy1298; + goto yy1292; if (yych <= '_') - goto yy1301; - goto yy1299; + goto yy1295; + goto yy1293; } else { if (yych == '~') - goto yy1300; + goto yy1294; if (yych <= 0x7F) - goto yy1301; + goto yy1295; } } else { if (yych <= 0xED) { if (yych <= 0xDF) - goto yy1302; + goto yy1296; if (yych <= 0xE0) - goto yy1304; + goto yy1298; if (yych <= 0xEC) - goto yy1305; - goto yy1309; + goto yy1299; + goto yy1303; } else { if (yych <= 0xF0) { if (yych <= 0xEF) - goto yy1305; - goto yy1306; + goto yy1299; + goto yy1300; } else { if (yych <= 0xF3) - goto yy1307; + goto yy1301; if (yych <= 0xF4) - goto yy1308; + goto yy1302; } } } - yy1298 : { return 0; } - yy1299: + yy1292 : { return 0; } + yy1293: yych = *(marker = ++p); if (yych == '`') - goto yy1317; - goto yy1298; - yy1300: + goto yy1311; + goto yy1292; + yy1294: yych = *(marker = ++p); if (yych == '~') - goto yy1310; - goto yy1298; - yy1301: + goto yy1304; + goto yy1292; + yy1295: yych = *++p; - goto yy1298; - yy1302: + goto yy1292; + yy1296: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1297; if (yych <= 0xBF) - goto yy1301; - yy1303: + goto yy1295; + yy1297: p = marker; - goto yy1298; - yy1304: + goto yy1292; + yy1298: yych = *++p; if (yych <= 0x9F) - goto yy1303; + goto yy1297; if (yych <= 0xBF) - goto yy1302; - goto yy1303; - yy1305: + goto yy1296; + goto yy1297; + yy1299: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1297; if (yych <= 0xBF) - goto yy1302; - goto yy1303; - yy1306: + goto yy1296; + goto yy1297; + yy1300: yych = *++p; if (yych <= 0x8F) - goto yy1303; + goto yy1297; if (yych <= 0xBF) - goto yy1305; - goto yy1303; - yy1307: + goto yy1299; + goto yy1297; + yy1301: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1297; if (yych <= 0xBF) - goto yy1305; - goto yy1303; - yy1308: + goto yy1299; + goto yy1297; + yy1302: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1297; if (yych <= 0x8F) - goto yy1305; - goto yy1303; - yy1309: + goto yy1299; + goto yy1297; + yy1303: yych = *++p; if (yych <= 0x7F) - goto yy1303; + goto yy1297; if (yych <= 0x9F) - goto yy1302; - goto yy1303; - yy1310: + goto yy1296; + goto yy1297; + yy1304: yych = *++p; if (yybm[0 + yych] & 32) { - goto yy1311; + goto yy1305; } - goto yy1303; - yy1311: + goto yy1297; + yy1305: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 64) { - goto yy1313; + goto yy1307; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1303; + goto yy1297; if (yych <= '\n') - goto yy1315; - goto yy1303; + goto yy1309; + goto yy1297; } else { if (yych <= '\r') - goto yy1315; + goto yy1309; if (yych == '~') - goto yy1311; - goto yy1303; + goto yy1305; + goto yy1297; } - yy1313: + yy1307: ++p; yych = *p; if (yybm[0 + yych] & 64) { - goto yy1313; + goto yy1307; } if (yych <= 0x08) - goto yy1303; + goto yy1297; if (yych <= '\n') - goto yy1315; + goto yy1309; if (yych != '\r') - goto yy1303; - yy1315: + goto yy1297; + yy1309: ++p; p = marker; { return (bufsize_t)(p - start); } - yy1317: + yy1311: yych = *++p; if (yybm[0 + yych] & 128) { - goto yy1318; + goto yy1312; } - goto yy1303; - yy1318: + goto yy1297; + yy1312: ++p; yych = *p; marker = p; if (yybm[0 + yych] & 128) { - goto yy1318; + goto yy1312; } if (yych <= '\f') { if (yych <= 0x08) - goto yy1303; + goto yy1297; if (yych <= '\t') - goto yy1320; + goto yy1314; if (yych <= '\n') - goto yy1322; - goto yy1303; + goto yy1316; + goto yy1297; } else { if (yych <= '\r') - goto yy1322; + goto yy1316; if (yych != ' ') - goto yy1303; + goto yy1297; } - yy1320: + yy1314: ++p; yych = *p; if (yych <= '\f') { if (yych <= 0x08) - goto yy1303; + goto yy1297; if (yych <= '\t') - goto yy1320; + goto yy1314; if (yych >= '\v') - goto yy1303; + goto yy1297; } else { if (yych <= '\r') - goto yy1322; + goto yy1316; if (yych == ' ') - goto yy1320; - goto yy1303; + goto yy1314; + goto yy1297; } - yy1322: + yy1316: ++p; p = marker; { return (bufsize_t)(p - start); } @@ -19658,997 +19655,997 @@ bufsize_t _scan_entity(const unsigned char *p) { if (yych <= 0xDF) { if (yych <= '%') { if (yych != '\n') - goto yy1328; + goto yy1322; } else { if (yych <= '&') - goto yy1327; + goto yy1321; if (yych <= 0x7F) - goto yy1328; + goto yy1322; if (yych >= 0xC2) - goto yy1329; + goto yy1323; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1331; + goto yy1325; if (yych == 0xED) - goto yy1336; - goto yy1332; + goto yy1330; + goto yy1326; } else { if (yych <= 0xF0) - goto yy1333; + goto yy1327; if (yych <= 0xF3) - goto yy1334; + goto yy1328; if (yych <= 0xF4) - goto yy1335; + goto yy1329; } } - yy1326 : { return 0; } - yy1327: + yy1320 : { return 0; } + yy1321: yych = *(marker = ++p); if (yych <= '@') { if (yych == '#') - goto yy1337; - goto yy1326; + goto yy1331; + goto yy1320; } else { if (yych <= 'Z') - goto yy1338; + goto yy1332; if (yych <= '`') - goto yy1326; + goto yy1320; if (yych <= 'z') - goto yy1338; - goto yy1326; + goto yy1332; + goto yy1320; } - yy1328: + yy1322: yych = *++p; - goto yy1326; - yy1329: + goto yy1320; + yy1323: yych = *++p; if (yych <= 0x7F) - goto yy1330; + goto yy1324; if (yych <= 0xBF) - goto yy1328; - yy1330: + goto yy1322; + yy1324: p = marker; - goto yy1326; - yy1331: + goto yy1320; + yy1325: yych = *++p; if (yych <= 0x9F) - goto yy1330; + goto yy1324; if (yych <= 0xBF) - goto yy1329; - goto yy1330; - yy1332: + goto yy1323; + goto yy1324; + yy1326: yych = *++p; if (yych <= 0x7F) - goto yy1330; + goto yy1324; if (yych <= 0xBF) - goto yy1329; - goto yy1330; - yy1333: + goto yy1323; + goto yy1324; + yy1327: yych = *++p; if (yych <= 0x8F) - goto yy1330; + goto yy1324; if (yych <= 0xBF) - goto yy1332; - goto yy1330; - yy1334: + goto yy1326; + goto yy1324; + yy1328: yych = *++p; if (yych <= 0x7F) - goto yy1330; + goto yy1324; if (yych <= 0xBF) - goto yy1332; - goto yy1330; - yy1335: + goto yy1326; + goto yy1324; + yy1329: yych = *++p; if (yych <= 0x7F) - goto yy1330; + goto yy1324; if (yych <= 0x8F) - goto yy1332; - goto yy1330; - yy1336: + goto yy1326; + goto yy1324; + yy1330: yych = *++p; if (yych <= 0x7F) - goto yy1330; + goto yy1324; if (yych <= 0x9F) - goto yy1329; - goto yy1330; - yy1337: + goto yy1323; + goto yy1324; + yy1331: yych = *++p; if (yych <= 'W') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1373; - goto yy1330; + goto yy1367; + goto yy1324; } else { if (yych <= 'X') - goto yy1372; + goto yy1366; if (yych == 'x') - goto yy1372; - goto yy1330; + goto yy1366; + goto yy1324; } - yy1338: + yy1332: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych >= ':') - goto yy1330; + goto yy1324; } else { if (yych <= 'Z') - goto yy1339; + goto yy1333; if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } - yy1339: + yy1333: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1342; + goto yy1336; if (yych <= ':') - goto yy1330; + goto yy1324; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; - goto yy1342; + goto yy1324; + goto yy1336; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych <= 'z') - goto yy1342; - goto yy1330; + goto yy1336; + goto yy1324; } } - yy1340: + yy1334: ++p; { return (bufsize_t)(p - start); } - yy1342: + yy1336: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1343; + goto yy1337; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1343: + yy1337: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1344; + goto yy1338; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1344: + yy1338: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1345; + goto yy1339; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1345: + yy1339: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1346; + goto yy1340; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1346: + yy1340: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1347; + goto yy1341; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1347: + yy1341: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1348; + goto yy1342; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1348: + yy1342: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1349; + goto yy1343; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1349: + yy1343: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1350; + goto yy1344; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1350: + yy1344: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1351; + goto yy1345; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1351: + yy1345: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1352; + goto yy1346; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1352: + yy1346: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1353; + goto yy1347; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1353: + yy1347: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1354; + goto yy1348; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1354: + yy1348: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1355; + goto yy1349; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1355: + yy1349: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1356; + goto yy1350; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1356: + yy1350: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1357; + goto yy1351; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1357: + yy1351: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1358; + goto yy1352; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1358: + yy1352: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1359; + goto yy1353; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1359: + yy1353: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1360; + goto yy1354; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1360: + yy1354: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1361; + goto yy1355; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1361: + yy1355: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1362; + goto yy1356; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1362: + yy1356: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1363; + goto yy1357; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1363: + yy1357: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1364; + goto yy1358; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1364: + yy1358: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1365; + goto yy1359; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1365: + yy1359: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1366; + goto yy1360; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1366: + yy1360: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1367; + goto yy1361; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1367: + yy1361: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1368; + goto yy1362; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1368: + yy1362: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1369; + goto yy1363; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1369: + yy1363: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1370; + goto yy1364; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1370: + yy1364: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1371; + goto yy1365; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'Z') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= '{') - goto yy1330; + goto yy1324; } } - yy1371: + yy1365: yych = *++p; if (yych == ';') - goto yy1340; - goto yy1330; - yy1372: + goto yy1334; + goto yy1324; + yy1366: yych = *++p; if (yych <= '@') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1380; - goto yy1330; + goto yy1374; + goto yy1324; } else { if (yych <= 'F') - goto yy1380; + goto yy1374; if (yych <= '`') - goto yy1330; + goto yy1324; if (yych <= 'f') - goto yy1380; - goto yy1330; + goto yy1374; + goto yy1324; } - yy1373: + yy1367: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1374; + goto yy1368; if (yych == ';') - goto yy1340; - goto yy1330; - yy1374: + goto yy1334; + goto yy1324; + yy1368: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1375; + goto yy1369; if (yych == ';') - goto yy1340; - goto yy1330; - yy1375: + goto yy1334; + goto yy1324; + yy1369: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1376; + goto yy1370; if (yych == ';') - goto yy1340; - goto yy1330; - yy1376: + goto yy1334; + goto yy1324; + yy1370: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1377; + goto yy1371; if (yych == ';') - goto yy1340; - goto yy1330; - yy1377: + goto yy1334; + goto yy1324; + yy1371: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1378; + goto yy1372; if (yych == ';') - goto yy1340; - goto yy1330; - yy1378: + goto yy1334; + goto yy1324; + yy1372: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1379; + goto yy1373; if (yych == ';') - goto yy1340; - goto yy1330; - yy1379: + goto yy1334; + goto yy1324; + yy1373: yych = *++p; if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1371; + goto yy1365; if (yych == ';') - goto yy1340; - goto yy1330; - yy1380: + goto yy1334; + goto yy1324; + yy1374: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1381; + goto yy1375; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= 'g') - goto yy1330; + goto yy1324; } } - yy1381: + yy1375: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1382; + goto yy1376; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= 'g') - goto yy1330; + goto yy1324; } } - yy1382: + yy1376: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1383; + goto yy1377; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= 'g') - goto yy1330; + goto yy1324; } } - yy1383: + yy1377: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1384; + goto yy1378; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= 'g') - goto yy1330; + goto yy1324; } } - yy1384: + yy1378: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1385; + goto yy1379; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= 'g') - goto yy1330; + goto yy1324; } } - yy1385: + yy1379: yych = *++p; if (yych <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1386; + goto yy1380; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; + goto yy1324; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych >= 'g') - goto yy1330; + goto yy1324; } } - yy1386: + yy1380: ++p; if ((yych = *p) <= ';') { if (yych <= '/') - goto yy1330; + goto yy1324; if (yych <= '9') - goto yy1371; + goto yy1365; if (yych <= ':') - goto yy1330; - goto yy1340; + goto yy1324; + goto yy1334; } else { if (yych <= 'F') { if (yych <= '@') - goto yy1330; - goto yy1371; + goto yy1324; + goto yy1365; } else { if (yych <= '`') - goto yy1330; + goto yy1324; if (yych <= 'f') - goto yy1371; - goto yy1330; + goto yy1365; + goto yy1324; } } } @@ -20668,415 +20665,415 @@ bufsize_t _scan_dangerous_url(const unsigned char *p) { if (yych <= 'I') { if (yych <= 'C') { if (yych != '\n') - goto yy1394; + goto yy1388; } else { if (yych <= 'D') - goto yy1390; + goto yy1384; if (yych == 'F') - goto yy1393; - goto yy1394; + goto yy1387; + goto yy1388; } } else { if (yych <= 'V') { if (yych <= 'J') - goto yy1391; + goto yy1385; if (yych <= 'U') - goto yy1394; - goto yy1392; + goto yy1388; + goto yy1386; } else { if (yych == 'd') - goto yy1390; + goto yy1384; if (yych <= 'e') - goto yy1394; - goto yy1393; + goto yy1388; + goto yy1387; } } } else { if (yych <= 0xDF) { if (yych <= 'u') { if (yych == 'j') - goto yy1391; - goto yy1394; + goto yy1385; + goto yy1388; } else { if (yych <= 'v') - goto yy1392; + goto yy1386; if (yych <= 0x7F) - goto yy1394; + goto yy1388; if (yych >= 0xC2) - goto yy1395; + goto yy1389; } } else { if (yych <= 0xEF) { if (yych <= 0xE0) - goto yy1397; + goto yy1391; if (yych == 0xED) - goto yy1402; - goto yy1398; + goto yy1396; + goto yy1392; } else { if (yych <= 0xF0) - goto yy1399; + goto yy1393; if (yych <= 0xF3) - goto yy1400; + goto yy1394; if (yych <= 0xF4) - goto yy1401; + goto yy1395; } } } - yy1389 : { return 0; } - yy1390: + yy1383 : { return 0; } + yy1384: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1424; + goto yy1418; if (yych == 'a') - goto yy1424; - goto yy1389; - yy1391: + goto yy1418; + goto yy1383; + yy1385: yyaccept = 0; yych = *(marker = ++p); if (yych == 'A') - goto yy1415; + goto yy1409; if (yych == 'a') - goto yy1415; - goto yy1389; - yy1392: + goto yy1409; + goto yy1383; + yy1386: yyaccept = 0; yych = *(marker = ++p); if (yych == 'B') - goto yy1408; + goto yy1402; if (yych == 'b') - goto yy1408; - goto yy1389; - yy1393: + goto yy1402; + goto yy1383; + yy1387: yyaccept = 0; yych = *(marker = ++p); if (yych == 'I') - goto yy1403; + goto yy1397; if (yych == 'i') - goto yy1403; - goto yy1389; - yy1394: + goto yy1397; + goto yy1383; + yy1388: yych = *++p; - goto yy1389; - yy1395: + goto yy1383; + yy1389: yych = *++p; if (yych <= 0x7F) - goto yy1396; + goto yy1390; if (yych <= 0xBF) - goto yy1394; - yy1396: + goto yy1388; + yy1390: p = marker; if (yyaccept == 0) { - goto yy1389; + goto yy1383; } else { - goto yy1407; + goto yy1401; } - yy1397: + yy1391: yych = *++p; if (yych <= 0x9F) - goto yy1396; + goto yy1390; if (yych <= 0xBF) - goto yy1395; - goto yy1396; - yy1398: + goto yy1389; + goto yy1390; + yy1392: yych = *++p; if (yych <= 0x7F) - goto yy1396; + goto yy1390; if (yych <= 0xBF) - goto yy1395; - goto yy1396; - yy1399: + goto yy1389; + goto yy1390; + yy1393: yych = *++p; if (yych <= 0x8F) - goto yy1396; + goto yy1390; if (yych <= 0xBF) - goto yy1398; - goto yy1396; - yy1400: + goto yy1392; + goto yy1390; + yy1394: yych = *++p; if (yych <= 0x7F) - goto yy1396; + goto yy1390; if (yych <= 0xBF) - goto yy1398; - goto yy1396; - yy1401: + goto yy1392; + goto yy1390; + yy1395: yych = *++p; if (yych <= 0x7F) - goto yy1396; + goto yy1390; if (yych <= 0x8F) - goto yy1398; - goto yy1396; - yy1402: + goto yy1392; + goto yy1390; + yy1396: yych = *++p; if (yych <= 0x7F) - goto yy1396; + goto yy1390; if (yych <= 0x9F) - goto yy1395; - goto yy1396; - yy1403: + goto yy1389; + goto yy1390; + yy1397: yych = *++p; if (yych == 'L') - goto yy1404; + goto yy1398; if (yych != 'l') - goto yy1396; - yy1404: + goto yy1390; + yy1398: yych = *++p; if (yych == 'E') - goto yy1405; + goto yy1399; if (yych != 'e') - goto yy1396; - yy1405: + goto yy1390; + yy1399: yych = *++p; if (yych != ':') - goto yy1396; - yy1406: + goto yy1390; + yy1400: ++p; - yy1407 : { return (bufsize_t)(p - start); } - yy1408: + yy1401 : { return (bufsize_t)(p - start); } + yy1402: yych = *++p; if (yych == 'S') - goto yy1409; + goto yy1403; if (yych != 's') - goto yy1396; - yy1409: + goto yy1390; + yy1403: yych = *++p; if (yych == 'C') - goto yy1410; + goto yy1404; if (yych != 'c') - goto yy1396; - yy1410: + goto yy1390; + yy1404: yych = *++p; if (yych == 'R') - goto yy1411; + goto yy1405; if (yych != 'r') - goto yy1396; - yy1411: + goto yy1390; + yy1405: yych = *++p; if (yych == 'I') - goto yy1412; + goto yy1406; if (yych != 'i') - goto yy1396; - yy1412: + goto yy1390; + yy1406: yych = *++p; if (yych == 'P') - goto yy1413; + goto yy1407; if (yych != 'p') - goto yy1396; - yy1413: + goto yy1390; + yy1407: yych = *++p; if (yych == 'T') - goto yy1414; + goto yy1408; if (yych != 't') - goto yy1396; - yy1414: + goto yy1390; + yy1408: yych = *++p; if (yych == ':') - goto yy1406; - goto yy1396; - yy1415: + goto yy1400; + goto yy1390; + yy1409: yych = *++p; if (yych == 'V') - goto yy1416; + goto yy1410; if (yych != 'v') - goto yy1396; - yy1416: + goto yy1390; + yy1410: yych = *++p; if (yych == 'A') - goto yy1417; + goto yy1411; if (yych != 'a') - goto yy1396; - yy1417: + goto yy1390; + yy1411: yych = *++p; if (yych == 'S') - goto yy1418; + goto yy1412; if (yych != 's') - goto yy1396; - yy1418: + goto yy1390; + yy1412: yych = *++p; if (yych == 'C') - goto yy1419; + goto yy1413; if (yych != 'c') - goto yy1396; - yy1419: + goto yy1390; + yy1413: yych = *++p; if (yych == 'R') - goto yy1420; + goto yy1414; if (yych != 'r') - goto yy1396; - yy1420: + goto yy1390; + yy1414: yych = *++p; if (yych == 'I') - goto yy1421; + goto yy1415; if (yych != 'i') - goto yy1396; - yy1421: + goto yy1390; + yy1415: yych = *++p; if (yych == 'P') - goto yy1422; + goto yy1416; if (yych != 'p') - goto yy1396; - yy1422: + goto yy1390; + yy1416: yych = *++p; if (yych == 'T') - goto yy1423; + goto yy1417; if (yych != 't') - goto yy1396; - yy1423: + goto yy1390; + yy1417: yych = *++p; if (yych == ':') - goto yy1406; - goto yy1396; - yy1424: + goto yy1400; + goto yy1390; + yy1418: yych = *++p; if (yych == 'T') - goto yy1425; + goto yy1419; if (yych != 't') - goto yy1396; - yy1425: + goto yy1390; + yy1419: yych = *++p; if (yych == 'A') - goto yy1426; + goto yy1420; if (yych != 'a') - goto yy1396; - yy1426: + goto yy1390; + yy1420: yych = *++p; if (yych != ':') - goto yy1396; + goto yy1390; yyaccept = 1; yych = *(marker = ++p); if (yych == 'I') - goto yy1428; + goto yy1422; if (yych != 'i') - goto yy1407; - yy1428: + goto yy1401; + yy1422: yych = *++p; if (yych == 'M') - goto yy1429; + goto yy1423; if (yych != 'm') - goto yy1396; - yy1429: + goto yy1390; + yy1423: yych = *++p; if (yych == 'A') - goto yy1430; + goto yy1424; if (yych != 'a') - goto yy1396; - yy1430: + goto yy1390; + yy1424: yych = *++p; if (yych == 'G') - goto yy1431; + goto yy1425; if (yych != 'g') - goto yy1396; - yy1431: + goto yy1390; + yy1425: yych = *++p; if (yych == 'E') - goto yy1432; + goto yy1426; if (yych != 'e') - goto yy1396; - yy1432: + goto yy1390; + yy1426: yych = *++p; if (yych != '/') - goto yy1396; + goto yy1390; yych = *++p; if (yych <= 'W') { if (yych <= 'J') { if (yych == 'G') - goto yy1435; + goto yy1429; if (yych <= 'I') - goto yy1396; - goto yy1436; + goto yy1390; + goto yy1430; } else { if (yych == 'P') - goto yy1434; + goto yy1428; if (yych <= 'V') - goto yy1396; - goto yy1437; + goto yy1390; + goto yy1431; } } else { if (yych <= 'j') { if (yych == 'g') - goto yy1435; + goto yy1429; if (yych <= 'i') - goto yy1396; - goto yy1436; + goto yy1390; + goto yy1430; } else { if (yych <= 'p') { if (yych <= 'o') - goto yy1396; + goto yy1390; } else { if (yych == 'w') - goto yy1437; - goto yy1396; + goto yy1431; + goto yy1390; } } } - yy1434: + yy1428: yych = *++p; if (yych == 'N') - goto yy1445; + goto yy1439; if (yych == 'n') - goto yy1445; - goto yy1396; - yy1435: + goto yy1439; + goto yy1390; + yy1429: yych = *++p; if (yych == 'I') - goto yy1444; + goto yy1438; if (yych == 'i') - goto yy1444; - goto yy1396; - yy1436: + goto yy1438; + goto yy1390; + yy1430: yych = *++p; if (yych == 'P') - goto yy1442; + goto yy1436; if (yych == 'p') - goto yy1442; - goto yy1396; - yy1437: + goto yy1436; + goto yy1390; + yy1431: yych = *++p; if (yych == 'E') - goto yy1438; + goto yy1432; if (yych != 'e') - goto yy1396; - yy1438: + goto yy1390; + yy1432: yych = *++p; if (yych == 'B') - goto yy1439; + goto yy1433; if (yych != 'b') - goto yy1396; - yy1439: + goto yy1390; + yy1433: yych = *++p; if (yych == 'P') - goto yy1440; + goto yy1434; if (yych != 'p') - goto yy1396; - yy1440: + goto yy1390; + yy1434: ++p; { return 0; } - yy1442: + yy1436: yych = *++p; if (yych == 'E') - goto yy1443; + goto yy1437; if (yych != 'e') - goto yy1396; - yy1443: + goto yy1390; + yy1437: yych = *++p; if (yych == 'G') - goto yy1440; + goto yy1434; if (yych == 'g') - goto yy1440; - goto yy1396; - yy1444: + goto yy1434; + goto yy1390; + yy1438: yych = *++p; if (yych == 'F') - goto yy1440; + goto yy1434; if (yych == 'f') - goto yy1440; - goto yy1396; - yy1445: + goto yy1434; + goto yy1390; + yy1439: ++p; if ((yych = *p) == 'G') - goto yy1440; + goto yy1434; if (yych == 'g') - goto yy1440; - goto yy1396; + goto yy1434; + goto yy1390; } } diff --git a/src/scanners.re b/src/scanners.re index 8b1c91e..52bf5aa 100644 --- a/src/scanners.re +++ b/src/scanners.re @@ -252,7 +252,7 @@ bufsize_t _scan_atx_heading_start(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - [#]{1,6} ([ ]+|[\r\n]) { return (bufsize_t)(p - start); } + [#]{1,6} ([ \t]+|[\r\n]) { return (bufsize_t)(p - start); } .? { return 0; } */ } @@ -277,9 +277,9 @@ bufsize_t _scan_thematic_break(const unsigned char *p) const unsigned char *marker = NULL; const unsigned char *start = p; /*!re2c - ([*][ ]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); } - ([_][ ]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); } - ([-][ ]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); } + ([*][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); } + ([_][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); } + ([-][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); } .? { return 0; } */ } diff --git a/test/spec.txt b/test/spec.txt index c7b1fcd..4c3de7a 100644 --- a/test/spec.txt +++ b/test/spec.txt @@ -336,9 +336,14 @@ the Unicode classes `Pc`, `Pd`, `Pe`, `Pf`, `Pi`, `Po`, or `Ps`. ## Tabs Tabs in lines are not expanded to [spaces]. However, -in contexts where indentation is significant for the -document's structure, tabs behave as if they were replaced -by spaces with a tab stop of 4 characters. +in contexts where whitespace helps to define block structure, +tabs behave as if they were replaced by spaces with a tab stop +of 4 characters. + +Thus, for exmaple, a tab can be used instead of four spaces +in an indented code block. (Note, however, that internal +tabs are passed through as literal tabs, not expanded to +spaces.) ```````````````````````````````` example →foo→baz→→bim @@ -347,7 +352,6 @@ by spaces with a tab stop of 4 characters. </code></pre> ```````````````````````````````` - ```````````````````````````````` example →foo→baz→→bim . @@ -355,7 +359,6 @@ by spaces with a tab stop of 4 characters. </code></pre> ```````````````````````````````` - ```````````````````````````````` example a→a ὐ→a @@ -365,6 +368,9 @@ by spaces with a tab stop of 4 characters. </code></pre> ```````````````````````````````` +In the following example, a continuation paragraph of a list +item is indented with a tab; this has exactly the same effect +as indentation with four spaces would: ```````````````````````````````` example - foo @@ -393,6 +399,15 @@ by spaces with a tab stop of 4 characters. </ul> ```````````````````````````````` +Normally the `>` that begins a block quote may be followed +optionally by a space, which is not considered part of the +content. In the following case `>` is followed by a tab, +which is treated as if it were expanded into spaces. +Since one of theses spaces is considered part of the +delimiter, `foo` is considered to be indented six spaces +inside the block quote context, so we get an indented +code block starting with two spaces. + ```````````````````````````````` example >→→foo . @@ -441,6 +456,17 @@ bar </ul> ```````````````````````````````` +```````````````````````````````` example +#→Foo +. +<h1>Foo</h1> +```````````````````````````````` + +```````````````````````````````` example +*→*→*→ +. +<hr /> +```````````````````````````````` ## Insecure characters @@ -779,15 +805,6 @@ headings: ```````````````````````````````` -A tab will not work: - -```````````````````````````````` example -#→foo -. -<p>#→foo</p> -```````````````````````````````` - - This is not a heading, because the first `#` is escaped: ```````````````````````````````` example @@ -1968,7 +1985,7 @@ by their start and end conditions. The block begins with a line that meets a [start condition](@) (after up to three spaces optional indentation). It ends with the first subsequent line that meets a matching [end condition](@), or the last line of -the document, if no line is encountered that meets the +the document or other [container block](@), if no line is encountered that meets the [end condition]. If the first line meets both the [start condition] and the [end condition], the block will contain just that line. @@ -3604,14 +3621,19 @@ An [ordered list marker](@) is a sequence of 1--9 arabic digits (`0-9`), followed by either a `.` character or a `)` character. (The reason for the length limit is that with 10 digits we start seeing integer overflows -in some browsers.) +in some browsers.) Exception: In cases where ordered list +markers interrupt paragraphs---that is, when they occur on a +line that would otherwise count as [paragraph continuation +text]---list markers must be followed by some content other than +spaces before the end of the line, and for ordered list markers, +only `1.` and `1)` are allowed. The following rules define [list items]: 1. **Basic case.** If a sequence of lines *Ls* constitute a sequence of blocks *Bs* starting with a [non-whitespace character] and not separated from each other by more than one blank line, and *M* is a list - marker of width *W* followed by 0 < *N* < 5 spaces, then the result + marker of width *W* followed by 1 ≤ *N* ≤ 4 spaces, then the result of prepending *M* and the following spaces to the first line of *Ls*, and indenting subsequent lines of *Ls* by *W + N* spaces, is a list item with *Bs* as its contents. The type of the list item @@ -3793,66 +3815,20 @@ any following content, so these are not list items: ```````````````````````````````` -A list item may not contain blocks that are separated by more than -one blank line. Thus, two blank lines will end a list, unless the -two blanks are contained in a [fenced code block]. +A list item may contain blocks that are separated by more than +one blank line. ```````````````````````````````` example - foo - bar - -- foo - - - bar - -- ``` - foo - bar - ``` - -- baz - - + ``` - foo - - - bar - ``` . <ul> <li> <p>foo</p> <p>bar</p> </li> -<li> -<p>foo</p> -</li> -</ul> -<p>bar</p> -<ul> -<li> -<pre><code>foo - - -bar -</code></pre> -</li> -<li> -<p>baz</p> -<ul> -<li> -<pre><code>foo - - -bar -</code></pre> -</li> -</ul> -</li> </ul> ```````````````````````````````` @@ -3885,15 +3861,14 @@ A list item may contain any kind of block: A list item that contains an indented code block will preserve -empty lines within the code block verbatim, unless there are two -or more empty lines in a row (since as described above, two -blank lines end the list): +empty lines within the code block verbatim. ```````````````````````````````` example - Foo bar + baz . <ul> @@ -3901,33 +3876,13 @@ blank lines end the list): <p>Foo</p> <pre><code>bar -baz -</code></pre> -</li> -</ul> -```````````````````````````````` - - -```````````````````````````````` example -- Foo - bar - - - baz -. -<ul> -<li> -<p>Foo</p> -<pre><code>bar +baz </code></pre> </li> </ul> -<pre><code> baz -</code></pre> ```````````````````````````````` - Note that ordered list start numbers must be nine digits or less: ```````````````````````````````` example @@ -4254,6 +4209,20 @@ A list may start or end with an empty list item: </ul> ```````````````````````````````` +However, an empty list item cannot interrupt a paragraph: + +```````````````````````````````` example +foo +* + +foo +1. +. +<p>foo +*</p> +<p>foo +1.</p> +```````````````````````````````` 4. **Indentation.** If a sequence of lines *Ls* constitutes a list item @@ -4836,28 +4805,20 @@ Foo </ul> ```````````````````````````````` - `Markdown.pl` does not allow this, through fear of triggering a list via a numeral in a hard-wrapped line: -```````````````````````````````` example +```````````````````````````````` markdown The number of windows in my house is 14. The number of doors is 6. -. -<p>The number of windows in my house is</p> -<ol start="14"> -<li>The number of doors is 6.</li> -</ol> ```````````````````````````````` +Oddly, though, `Markdown.pl` *does* allow a blockquote to +interrupt a paragraph, even though the same considerations might +apply. - -Oddly, `Markdown.pl` *does* allow a blockquote to interrupt a paragraph, -even though the same considerations might apply. We think that the two -cases should be treated the same. Here are two reasons for allowing -lists to interrupt paragraphs: - -First, it is natural and not uncommon for people to start lists without -blank lines: +In CommonMark, we do allow lists to interrupt paragraphs, for +two reasons. First, it is natural and not uncommon for people +to start lists without blank lines: I need to buy - new shoes @@ -4891,20 +4852,40 @@ then by itself should be a paragraph followed by a nested sublist. -Our adherence to the [principle of uniformity] -thus inclines us to think that there are two coherent packages: +Since it is well established Markdown practice to allow lists to +interrupt paragraphs inside list items, the [principle of +uniformity] requires us to allow this outside list items as +well. ([reStructuredText](http://docutils.sourceforge.net/rst.html) +takes a different approach, requiring blank lines before lists +even inside other list items.) -1. Require blank lines before *all* lists and blockquotes, - including lists that occur as sublists inside other list items. +In order to solve of unwanted lists in paragraphs with +hard-wrapped numerals, we allow only lists starting with `1` to +interrupt paragraphs. Thus, -2. Require blank lines in none of these places. +```````````````````````````````` example +The number of windows in my house is +14. The number of doors is 6. +. +<p>The number of windows in my house is +14. The number of doors is 6.</p> +```````````````````````````````` -[reStructuredText](http://docutils.sourceforge.net/rst.html) takes -the first approach, for which there is much to be said. But the second -seems more consistent with established practice with Markdown. +We may still get an unintended result in cases like -There can be blank lines between items, but two blank lines end -a list: +```````````````````````````````` example +The number of windows in my house is +1. The number of doors is 6. +. +<p>The number of windows in my house is</p> +<ol> +<li>The number of doors is 6.</li> +</ol> +```````````````````````````````` + +but this rule should prevent most spurious list captures. + +There can be any number of blank lines between items: ```````````````````````````````` example - foo @@ -4921,36 +4902,12 @@ a list: <li> <p>bar</p> </li> -</ul> -<ul> -<li>baz</li> -</ul> -```````````````````````````````` - - -As illustrated above in the section on [list items], -two blank lines between blocks *within* a list item will also end a -list: - -```````````````````````````````` example -- foo - - - bar -- baz -. -<ul> -<li>foo</li> -</ul> -<p>bar</p> -<ul> -<li>baz</li> +<li> +<p>baz</p> +</li> </ul> ```````````````````````````````` - -Indeed, two blank lines will end *all* containing lists: - ```````````````````````````````` example - foo - bar @@ -4964,26 +4921,28 @@ Indeed, two blank lines will end *all* containing lists: <ul> <li>bar <ul> -<li>baz</li> +<li> +<p>baz</p> +<p>bim</p> +</li> </ul> </li> </ul> </li> </ul> -<pre><code> bim -</code></pre> ```````````````````````````````` -Thus, two blank lines can be used to separate consecutive lists of -the same type, or to separate a list from an indented code block -that would otherwise be parsed as a subparagraph of the final list -item: +To separate consecutive lists of the same type, or to separate a +list from an indented code block that would otherwise be parsed +as a subparagraph of the final list item, you can insert a blank HTML +comment: ```````````````````````````````` example - foo - bar +<!-- --> - baz - bim @@ -4992,6 +4951,7 @@ item: <li>foo</li> <li>bar</li> </ul> +<!-- --> <ul> <li>baz</li> <li>bim</li> @@ -5006,6 +4966,7 @@ item: - foo +<!-- --> code . @@ -5018,6 +4979,7 @@ item: <p>foo</p> </li> </ul> +<!-- --> <pre><code>code </code></pre> ```````````````````````````````` @@ -6176,10 +6138,8 @@ A newline also counts as whitespace: *foo bar * . -<p>*foo bar</p> -<ul> -<li></li> -</ul> +<p>*foo bar +*</p> ```````````````````````````````` @@ -8953,7 +8913,7 @@ foo A regular line break (not in a code span or HTML tag) that is not preceded by two or more spaces or a backslash is parsed as a -softbreak. (A softbreak may be rendered in HTML either as a +[softbreak](@). (A softbreak may be rendered in HTML either as a [line ending] or as a space. The result will be the same in browsers. In the examples here, a [line ending] will be used.) |