summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--README.md2
-rw-r--r--api_test/main.c32
-rw-r--r--src/blocks.c67
-rw-r--r--src/chunk.h7
-rw-r--r--src/scanners.c2041
-rw-r--r--src/scanners.re8
-rw-r--r--test/spec.txt266
8 files changed, 1201 insertions, 1228 deletions
diff --git a/Makefile b/Makefile
index 039089e..a03d43d 100644
--- a/Makefile
+++ b/Makefile
@@ -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 \
diff --git a/README.md b/README.md
index 9705584..98273ed 100644
--- a/README.md
+++ b/README.md
@@ -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.)